[glib/wip/nosigpipe: 1/2] gsocket: move set_fd_nonblocking() into g_socket_constructed()



commit a65c2fc21e252ccaab478da6afc5a1c0058f623f
Author: Dan Winship <danw gnome org>
Date:   Thu May 1 09:58:07 2014 -0400

    gsocket: move set_fd_nonblocking() into g_socket_constructed()

 gio/gsocket.c |   58 ++++++++++++++++++++++++++------------------------------
 1 files changed, 27 insertions(+), 31 deletions(-)
---
diff --git a/gio/gsocket.c b/gio/gsocket.c
index 6713d0a..2f7f0dc 100644
--- a/gio/gsocket.c
+++ b/gio/gsocket.c
@@ -256,32 +256,6 @@ _win32_unset_event_mask (GSocket *socket, int mask)
   recv (sockfd, (gpointer)buf, len, flags)
 #endif
 
-static void
-set_fd_nonblocking (int fd)
-{
-#ifndef G_OS_WIN32
-  GError *error = NULL;
-#else
-  gulong arg;
-#endif
-
-#ifndef G_OS_WIN32
-  if (!g_unix_set_fd_nonblocking (fd, TRUE, &error))
-    {
-      g_warning ("Error setting socket nonblocking: %s", error->message);
-      g_clear_error (&error);
-    }
-#else
-  arg = TRUE;
-
-  if (ioctlsocket (fd, FIONBIO, &arg) == SOCKET_ERROR)
-    {
-      int errsv = get_socket_errno ();
-      g_warning ("Error setting socket status flags: %s", socket_strerror (errsv));
-    }
-#endif
-}
-
 static gboolean
 check_socket (GSocket *socket,
              GError **error)
@@ -578,12 +552,34 @@ g_socket_constructed (GObject *object)
                                               socket->priv->protocol,
                                               &socket->priv->construct_error);
 
-  /* Always use native nonblocking sockets, as
-     windows sets sockets to nonblocking automatically
-     in certain operations. This way we make things work
-     the same on all platforms */
   if (socket->priv->fd != -1)
-    set_fd_nonblocking (socket->priv->fd);
+    {
+#ifndef G_OS_WIN32
+      GError *error = NULL;
+#else
+      gulong arg;
+#endif
+
+      /* Always use native nonblocking sockets, as Windows sets sockets to
+       * nonblocking automatically in certain operations. This way we make
+       * things work the same on all platforms.
+       */
+#ifndef G_OS_WIN32
+      if (!g_unix_set_fd_nonblocking (socket->priv->fd, TRUE, &error))
+        {
+          g_warning ("Error setting socket nonblocking: %s", error->message);
+          g_clear_error (&error);
+        }
+#else
+      arg = TRUE;
+
+      if (ioctlsocket (socket->priv->fd, FIONBIO, &arg) == SOCKET_ERROR)
+        {
+          int errsv = get_socket_errno ();
+          g_warning ("Error setting socket status flags: %s", socket_strerror (errsv));
+        }
+#endif
+    }
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]