[gnio] Use g_socket_check_pending_error() for async connect



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]