[gnio] Use g_socket_check_pending_error() for async connect
- From: Alexander Larsson <alexl src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnio] Use g_socket_check_pending_error() for async connect
- Date: Thu, 7 May 2009 13:00:19 -0400 (EDT)
commit fc997f4c03c7a2e695955055c40ec1f4c32c2eed
Author: Alexander Larsson <alexl redhat com>
Date: Thu May 7 18:57:48 2009 +0200
Use g_socket_check_pending_error() for async connect
---
gio/gsocketclient.c | 24 ++++++++++++++++++++----
1 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/gio/gsocketclient.c b/gio/gsocketclient.c
index 2e9245c..ae6dd86 100644
--- a/gio/gsocketclient.c
+++ b/gio/gsocketclient.c
@@ -149,17 +149,33 @@ static gboolean
g_socket_client_socket_callback (GSocketClientAsyncConnectData *data,
GIOCondition condition)
{
- if (g_cancellable_set_error_if_cancelled (data->cancellable,
- &data->last_error))
+ GError *error = NULL;
+
+ if (g_cancellable_is_cancelled (data->cancellable))
{
+ /* Cancelled, return done with last error being cancelled */
+ g_clear_error (&data->last_error);
+ g_cancellable_set_error_if_cancelled (data->cancellable,
+ &data->last_error);
}
else if (condition & G_IO_OUT)
{
- /* socket is ready for writing = success. */
+ /* socket is ready for writing = connect done, did it succeed? */
+ if (!g_socket_check_pending_error (data->current_socket, &error))
+ {
+ g_clear_error (&data->last_error);
+ data->last_error = error;
+
+ /* try next one */
+ g_socket_address_enumerator_next_async (data->enumerator,
+ data->cancellable, g_socket_client_enumerator_callback, data);
+
+ return FALSE;
+ }
}
else
{
- /* socket error */
+ /* G_IO_ERR maybe?, can this happen? */
g_object_unref (data->current_socket);
data->current_socket = NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]