Make listen do error reporting
authorSamuel Cormier-Iijima <sciyoshi@gmail.com>
Thu, 28 Feb 2008 21:34:29 +0000 (16:34 -0500)
committerSamuel Cormier-Iijima <sciyoshi@gmail.com>
Thu, 28 Feb 2008 21:34:29 +0000 (16:34 -0500)
gnio/gsocket.c
gnio/gsocket.h
test/test-server.c

index 9d50665..5361438 100644 (file)
@@ -369,12 +369,19 @@ g_socket_get_remote_address (GSocket  *socket,
   return (socket->priv->remote_address = g_object_ref_sink (g_socket_address_from_native (buffer, len)));
 }
 
-void
-g_socket_listen (GSocket *socket)
+gboolean
+g_socket_listen (GSocket  *socket,
+                 GError  **error)
 {
-  g_return_if_fail (G_IS_SOCKET (socket));
+  g_return_val_if_fail (G_IS_SOCKET (socket), FALSE);
 
-  listen (socket->priv->fd, socket->priv->backlog);
+  if (listen (socket->priv->fd, socket->priv->backlog) < 0)
+    {
+      g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), "could not listen: %s", g_strerror (errno));
+      return FALSE;
+    }
+
+  return TRUE;
 }
 
 gboolean
index 1e92e55..34254d4 100644 (file)
@@ -95,7 +95,8 @@ gboolean         g_socket_connect            (GSocket         *socket,
 GSocket *        g_socket_accept             (GSocket       *socket,
                                               GError       **error);
 
-void             g_socket_listen             (GSocket *socket);
+gboolean         g_socket_listen             (GSocket  *socket,
+                                              GError  **error);
 
 gssize           g_socket_receive            (GSocket       *socket,
                                               gchar         *buffer,
index 9d20622..1446cca 100644 (file)
@@ -67,7 +67,10 @@ int main (int argc, char *argv[])
                return 0;
        }
 
-       g_socket_listen (socket);
+       if (!g_socket_listen (socket, &error)) {
+               g_error (error->message);
+               return 0;
+       }
 
        g_print ("listening on port 31882...\n");