* @G_IO_ERROR_PROXY_NOT_ALLOWED: Proxy connection is not allowed by ruleset.
* Since 2.26
* @G_IO_ERROR_BROKEN_PIPE: Broken pipe. Since 2.36
+ * @G_IO_ERROR_CONNECTION_CLOSED: Connection closed by peer. Note that this
+ * is the same code as %G_IO_ERROR_BROKEN_PIPE; before 2.44 some
+ * "connection closed" errors returned %G_IO_ERROR_BROKEN_PIPE, but others
+ * returned %G_IO_ERROR_FAILED. Now they should all return the same
+ * value, which has this more logical name. Since 2.44.
*
* Error codes returned by GIO functions.
*
* Note that this domain may be extended in future GLib releases. In
* general, new error codes either only apply to new APIs, or else
- * replace #G_IO_ERROR_FAILED in cases that were not explicitly
+ * replace %G_IO_ERROR_FAILED in cases that were not explicitly
* distinguished before. You should therefore avoid writing code like
* |[<!-- language="C" -->
* if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_FAILED))
G_IO_ERROR_PROXY_AUTH_FAILED,
G_IO_ERROR_PROXY_NEED_AUTH,
G_IO_ERROR_PROXY_NOT_ALLOWED,
- G_IO_ERROR_BROKEN_PIPE
+ G_IO_ERROR_BROKEN_PIPE,
+ G_IO_ERROR_CONNECTION_CLOSED = G_IO_ERROR_BROKEN_PIPE
} GIOErrorEnum;
g_thread_join (data->thread);
- len = g_socket_receive (client, buf, sizeof (buf), NULL, &error);
- g_assert_no_error (error);
- g_assert_cmpint (len, ==, 0);
+ if (family == G_SOCKET_FAMILY_IPV4)
+ {
+ /* Test that reading on a remote-closed socket gets back 0 bytes. */
+ len = g_socket_receive_with_blocking (client, buf, sizeof (buf),
+ TRUE, NULL, &error);
+ g_assert_no_error (error);
+ g_assert_cmpint (len, ==, 0);
+ }
+ else
+ {
+ /* Test that writing to a remote-closed socket gets back CONNECTION_CLOSED. */
+ len = g_socket_send_with_blocking (client, testbuf, strlen (testbuf) + 1,
+ TRUE, NULL, &error);
+ g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CONNECTION_CLOSED);
+ g_assert_cmpint (len, ==, -1);
+ g_clear_error (&error);
+ }
g_socket_close (client, &error);
g_assert_no_error (error);
g_thread_join (data->thread);
- len = g_socket_receive (client, buf, sizeof (buf), NULL, &error);
- g_assert_no_error (error);
- g_assert_cmpint (len, ==, 0);
+ if (family == G_SOCKET_FAMILY_IPV4)
+ {
+ /* Test that reading on a remote-closed socket gets back 0 bytes. */
+ len = g_socket_receive (client, buf, sizeof (buf), NULL, &error);
+ g_assert_no_error (error);
+ g_assert_cmpint (len, ==, 0);
+ }
+ else
+ {
+ /* Test that writing to a remote-closed socket gets back CONNECTION_CLOSED. */
+ len = g_socket_send (client, testbuf, strlen (testbuf) + 1, NULL, &error);
+ g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CONNECTION_CLOSED);
+ g_assert_cmpint (len, ==, -1);
+ g_clear_error (&error);
+ }
g_socket_close (client, &error);
g_assert_no_error (error);