/**
* g_socket_accept:
* @socket: a #GSocket.
+ * @cancellable: a %GCancellable or %NULL
* @error: #GError for error reporting, or %NULL to ignore.
*
* Accept incoming connections on a connection-based socket. This removes
*/
GSocket *
g_socket_accept (GSocket *socket,
+ GCancellable *cancellable,
GError **error)
{
GSocket *new_socket;
{
if (socket->priv->blocking &&
!g_socket_condition_wait (socket,
- G_IO_IN, NULL, error))
+ G_IO_IN, cancellable, error))
return NULL;
if ((ret = accept (socket->priv->fd, NULL, 0)) < 0)
* g_socket_connect:
* @socket: a #GSocket.
* @address: a #GSocketAddress specifying the remote address.
+ * @cancellable: a %GCancellable or %NULL
* @error: #GError for error reporting, or %NULL to ignore.
*
* Connect the socket to the specified remote address.
gboolean
g_socket_connect (GSocket *socket,
GSocketAddress *address,
+ GCancellable *cancellable,
GError **error)
{
struct sockaddr_storage buffer;
{
if (socket->priv->blocking)
{
- g_socket_condition_wait (socket, G_IO_OUT, NULL, NULL);
- if (g_socket_check_connect_result (socket, error))
- break;
- else
- g_prefix_error (error, _("Error connecting: "));
+ if (g_socket_condition_wait (socket, G_IO_OUT, cancellable, error))
+ {
+ if (g_socket_check_connect_result (socket, error))
+ break;
+ }
+ g_prefix_error (error, _("Error connecting: "));
}
else
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PENDING,
* @buffer: a buffer to read data into (which should be at least @size
* bytes long).
* @size: the number of bytes you want to read from the socket
+ * @cancellable: a %GCancellable or %NULL
* @error: #GError for error reporting, or %NULL to ignore.
*
* Receive data (up to @size bytes) from a socket. This is mainly used by
* Since: 2.22
*/
gssize
-g_socket_receive (GSocket *socket,
- gchar *buffer,
- gsize size,
- GError **error)
+g_socket_receive (GSocket *socket,
+ gchar *buffer,
+ gsize size,
+ GCancellable *cancellable,
+ GError **error)
{
gssize ret;
if (!check_socket (socket, error))
return -1;
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return -1;
+
while (1)
{
if (socket->priv->blocking &&
!g_socket_condition_wait (socket,
- G_IO_IN, NULL, error))
+ G_IO_IN, cancellable, error))
return -1;
if ((ret = recv (socket->priv->fd, buffer, size, 0)) < 0)
* @buffer: a buffer to read data into (which should be at least @size
* bytes long).
* @size: the number of bytes you want to read from the socket
+ * @cancellable: a %GCancellable or %NULL
* @error: #GError for error reporting, or %NULL to ignore.
*
* Receive data (up to @size bytes) from a socket.
GSocketAddress **address,
gchar *buffer,
gsize size,
+ GCancellable *cancellable,
GError **error)
{
GInputVector v;
address,
&v, 1,
NULL, 0, NULL,
+ cancellable,
error);
}
* @socket: a #GSocket
* @buffer: the buffer containing the data to send.
* @size: the number of bytes to send
+ * @cancellable: a %GCancellable or %NULL
* @error: #GError for error reporting, or %NULL to ignore.
*
* Tries to send @size bytes from @buffer on the socket. This is
* Since: 2.22
*/
gssize
-g_socket_send (GSocket *socket,
- const gchar *buffer,
- gsize size,
- GError **error)
+g_socket_send (GSocket *socket,
+ const gchar *buffer,
+ gsize size,
+ GCancellable *cancellable,
+ GError **error)
{
gssize ret;
if (!check_socket (socket, error))
return -1;
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return -1;
+
while (1)
{
if (socket->priv->blocking &&
!g_socket_condition_wait (socket,
- G_IO_OUT, NULL, error))
+ G_IO_OUT, cancellable, error))
return -1;
if ((ret = send (socket->priv->fd, buffer, size, 0)) < 0)
* @address: a #GSocketAddress, or %NULL
* @buffer: the buffer containing the data to send.
* @size: the number of bytes to send
+ * @cancellable: a %GCancellable or %NULL
* @error: #GError for error reporting, or %NULL to ignore.
*
* Tries to send @size bytes from @buffer to @address. If @address is
GSocketAddress *address,
const gchar *buffer,
gsize size,
+ GCancellable *cancellable,
GError **error)
{
GOutputVector v;
address,
&v, 1,
NULL, 0,
- 0, error);
+ 0,
+ cancellable,
+ error);
}
/**
* %NULL.
* @num_messages: number of elements in @messages, or -1.
* @flags: an int containing #GSocketMsgFlags flags
+ * @cancellable: a %GCancellable or %NULL
* @error: #GError for error reporting, or %NULL to ignore.
*
* Send data to @address on @socket. This is the most complicated and
GSocketControlMessage **messages,
gint num_messages,
gint flags,
+ GCancellable *cancellable,
GError **error)
{
GOutputVector one_vector;
if (!check_socket (socket, error))
return -1;
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return -1;
+
if (num_vectors == -1)
{
for (num_vectors = 0;
{
if (socket->priv->blocking &&
!g_socket_condition_wait (socket,
- G_IO_OUT, NULL, error))
+ G_IO_OUT, cancellable, error))
return -1;
result = sendmsg (socket->priv->fd, &msg, flags);
{
if (socket->priv->blocking &&
!g_socket_condition_wait (socket,
- G_IO_OUT, NULL, error))
+ G_IO_OUT, cancellable, error))
return -1;
if (address)
* @num_messages: a pointer which will be filled with the number of
* elements in @messages, or %NULL
* @flags: a pointer to an int containing #GSocketMsgFlags flags
+ * @cancellable: a %GCancellable or %NULL
* @error: a #GError pointer, or %NULL
*
* Receive data from a socket. This is the most complicated and
GSocketControlMessage ***messages,
gint *num_messages,
gint *flags,
+ GCancellable *cancellable,
GError **error)
{
GInputVector one_vector;
if (!check_socket (socket, error))
return -1;
+ if (g_cancellable_set_error_if_cancelled (cancellable, error))
+ return -1;
+
if (num_vectors == -1)
{
for (num_vectors = 0;
{
if (socket->priv->blocking &&
!g_socket_condition_wait (socket,
- G_IO_IN, NULL, error))
+ G_IO_IN, cancellable, error))
return -1;
result = recvmsg (socket->priv->fd, &msg, msg.msg_flags);
{
if (socket->priv->blocking &&
!g_socket_condition_wait (socket,
- G_IO_IN, NULL, error))
+ G_IO_IN, cancellable, error))
return -1;
addrlen = sizeof addr;
GError **error);
gboolean g_socket_connect (GSocket *socket,
GSocketAddress *address,
+ GCancellable *cancellable,
GError **error);
gboolean g_socket_check_connect_result (GSocket *socket,
GError **error);
GCancellable *cancellable,
GError **error);
GSocket * g_socket_accept (GSocket *socket,
+ GCancellable *cancellable,
GError **error);
gboolean g_socket_listen (GSocket *socket,
GError **error);
gssize g_socket_receive (GSocket *socket,
gchar *buffer,
gsize size,
+ GCancellable *cancellable,
GError **error);
gssize g_socket_receive_from (GSocket *socket,
GSocketAddress **address,
gchar *buffer,
gsize size,
+ GCancellable *cancellable,
GError **error);
gssize g_socket_send (GSocket *socket,
const gchar *buffer,
gsize size,
+ GCancellable *cancellable,
GError **error);
gssize g_socket_send_to (GSocket *socket,
GSocketAddress *address,
const gchar *buffer,
gsize size,
+ GCancellable *cancellable,
GError **error);
gssize g_socket_receive_message (GSocket *socket,
GSocketAddress **address,
GSocketControlMessage ***messages,
gint *num_messages,
gint *flags,
+ GCancellable *cancellable,
GError **error);
gssize g_socket_send_message (GSocket *socket,
GSocketAddress *address,
GSocketControlMessage **messages,
gint num_messages,
gint flags,
+ GCancellable *cancellable,
GError **error);
gboolean g_socket_close (GSocket *socket,
GError **error);
socket = create_socket (client, address, &last_error);
if (socket != NULL)
{
- if (g_socket_connect (socket, address, &last_error))
+ if (g_socket_connect (socket, address, cancellable, &last_error))
connection = g_socket_connection_factory_create_connection (socket);
g_object_unref (socket);
if (socket != NULL)
{
g_socket_set_blocking (socket, FALSE);
- if (g_socket_connect (socket, address, &tmp_error))
+ if (g_socket_connect (socket, address, data->cancellable, &tmp_error))
{
data->current_socket = socket;
g_socket_client_async_connect_complete (data);
{
GSocketInputStream *input_stream = G_SOCKET_INPUT_STREAM (stream);
- if (!g_socket_condition_wait (input_stream->priv->socket,
- G_IO_IN, cancellable, error))
- return -1;
-
- return g_socket_receive (input_stream->priv->socket, buffer, count, error);
+ return g_socket_receive (input_stream->priv->socket, buffer, count,
+ cancellable, error);
}
static gboolean
{
GSimpleAsyncResult *simple;
GError *error = NULL;
+ gssize result;
simple = stream->priv->result;
stream->priv->result = NULL;
- if (!g_cancellable_set_error_if_cancelled (stream->priv->cancellable,
- &error))
- {
- gssize result;
-
- result = g_socket_receive (stream->priv->socket,
- stream->priv->buffer,
- stream->priv->count,
- &error);
- if (result >= 0)
- g_simple_async_result_set_op_res_gssize (simple, result);
- }
+ result = g_socket_receive (stream->priv->socket,
+ stream->priv->buffer,
+ stream->priv->count,
+ stream->priv->cancellable,
+ &error);
+ if (result >= 0)
+ g_simple_async_result_set_op_res_gssize (simple, result);
if (error)
{
g_main_loop_unref (loop);
}
- if (!(socket = g_socket_accept (accept_socket, error)))
+ if (!(socket = g_socket_accept (accept_socket, cancellable, error)))
return NULL;
if (source_object)
{
struct AcceptAsyncData *data = _data;
GError *error = NULL;
+ GSocket *socket;
+ GObject *source_object;
- if (!g_cancellable_set_error_if_cancelled (data->cancellable,
- &error))
+ socket = g_socket_accept (accept_socket, data->cancellable, &error);
+ if (socket)
{
- GSocket *socket;
- GObject *source_object;
-
- socket = g_socket_accept (accept_socket, &error);
- if (socket)
- {
- g_simple_async_result_set_op_res_gpointer (data->simple, socket,
- g_object_unref);
- source_object = g_object_get_qdata (G_OBJECT (accept_socket), source_quark);
- if (source_object)
- g_object_set_qdata_full (G_OBJECT (data->simple),
- source_quark,
- g_object_ref (source_object), g_object_unref);
- }
+ g_simple_async_result_set_op_res_gpointer (data->simple, socket,
+ g_object_unref);
+ source_object = g_object_get_qdata (G_OBJECT (accept_socket), source_quark);
+ if (source_object)
+ g_object_set_qdata_full (G_OBJECT (data->simple),
+ source_quark,
+ g_object_ref (source_object), g_object_unref);
}
-
- if (error)
+ else
{
g_simple_async_result_set_from_error (data->simple, error);
g_error_free (error);
{
GSocketOutputStream *onput_stream = G_SOCKET_OUTPUT_STREAM (stream);
- if (!g_socket_condition_wait (onput_stream->priv->socket,
- G_IO_OUT, cancellable, error))
- return -1;
-
- return g_socket_send (onput_stream->priv->socket, buffer, count, error);
+ return g_socket_send (onput_stream->priv->socket, buffer, count,
+ cancellable, error);
}
static gboolean
{
GSimpleAsyncResult *simple;
GError *error = NULL;
+ gssize result;
simple = stream->priv->result;
stream->priv->result = NULL;
- if (!g_cancellable_set_error_if_cancelled (stream->priv->cancellable,
- &error))
- {
- gssize result;
-
- result = g_socket_send (stream->priv->socket,
- stream->priv->buffer,
- stream->priv->count,
- &error);
- if (result >= 0)
- g_simple_async_result_set_op_res_gssize (simple, result);
- }
+ result = g_socket_send (stream->priv->socket,
+ stream->priv->buffer,
+ stream->priv->count,
+ stream->priv->cancellable,
+ &error);
+ if (result >= 0)
+ g_simple_async_result_set_op_res_gssize (simple, result);
if (error)
{
{
while (TRUE)
{
- if (!g_socket_condition_wait (socket,
- G_IO_IN, cancellable, error))
- {
- had_error = TRUE;
- error = NULL;
- break;
- }
-
my_error = NULL;
ret = g_socket_receive (socket, buffer, sizeof (buffer),
- &my_error);
+ cancellable, &my_error);
if (ret < 0)
{
if (g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
char buffer[1024];
gssize ret;
- if (g_cancellable_set_error_if_cancelled (data->cancellable,
- &error))
- {
- async_close_finish (data, error, TRUE);
- g_error_free (error);
- return FALSE;
- }
-
- ret = g_socket_receive (socket, buffer, sizeof (buffer), &error);
+ ret = g_socket_receive (socket, buffer, sizeof (buffer),
+ data->cancellable, &error);
if (ret < 0)
{
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
}
g_object_get (connection, "socket", &socket, NULL);
- if (!g_socket_condition_wait (socket, G_IO_OUT, cancellable, error) ||
- g_socket_send_message (socket, NULL, NULL, 0, &scm, 1, 0, error) != 1)
+ if (g_socket_send_message (socket, NULL, NULL, 0, &scm, 1, 0, cancellable, error) != 1)
/* XXX could it 'fail' with zero? */
{
g_object_unref (socket);
g_return_val_if_fail (G_IS_UNIX_CONNECTION (connection), -1);
g_object_get (connection, "socket", &socket, NULL);
- if (!g_socket_condition_wait (socket, G_IO_IN, cancellable, error) ||
- g_socket_receive_message (socket, NULL, NULL, 0,
- &scms, &nscm, NULL, error) != 1)
+ if (g_socket_receive_message (socket, NULL, NULL, 0,
+ &scms, &nscm, NULL, cancellable, error) != 1)
/* XXX it _could_ 'fail' with zero. */
{
g_object_unref (socket);
return 1;
}
- if (g_socket_connect (socket, address, &error))
+ if (g_socket_connect (socket, address, cancellable, &error))
break;
g_printerr ("%s: Connection to %s failed: %s, trying next\n", argv[0], socket_address_to_string (address), error->message);
g_error_free (error);
ensure_condition (socket, "send", cancellable, G_IO_OUT);
if (use_udp)
size = g_socket_send_to (socket, address,
- buffer, to_send, &error);
+ buffer, to_send,
+ cancellable, &error);
else
- size = g_socket_send (socket, buffer, to_send, &error);
+ size = g_socket_send (socket, buffer, to_send,
+ cancellable, &error);
if (size < 0)
{
ensure_condition (socket, "receive", cancellable, G_IO_IN);
if (use_udp)
size = g_socket_receive_from (socket, &src_address,
- buffer, sizeof buffer, &error);
+ buffer, sizeof buffer,
+ cancellable, &error);
else
- size = g_socket_receive (socket, buffer, sizeof buffer, &error);
+ size = g_socket_receive (socket, buffer, sizeof buffer,
+ cancellable, &error);
if (size < 0)
{
g_print ("listening on port %d...\n", port);
ensure_condition (socket, "accept", cancellable, G_IO_IN);
- new_socket = g_socket_accept (socket, &error);
+ new_socket = g_socket_accept (socket, cancellable, &error);
if (!new_socket)
{
g_printerr ("Error accepting socket: %s\n",
ensure_condition (recv_socket, "receive", cancellable, G_IO_IN);
if (use_udp)
size = g_socket_receive_from (recv_socket, &address,
- buffer, sizeof buffer, &error);
+ buffer, sizeof buffer,
+ cancellable, &error);
else
- size = g_socket_receive (recv_socket, buffer, sizeof buffer, &error);
+ size = g_socket_receive (recv_socket, buffer, sizeof buffer,
+ cancellable, &error);
if (size < 0)
{
ensure_condition (recv_socket, "send", cancellable, G_IO_OUT);
if (use_udp)
size = g_socket_send_to (recv_socket, address,
- buffer, to_send, &error);
+ buffer, to_send, cancellable, &error);
else
- size = g_socket_send (recv_socket, buffer, to_send, &error);
+ size = g_socket_send (recv_socket, buffer, to_send,
+ cancellable, &error);
if (size < 0)
{