handle socket creation failure
authorChristian Thaeter <ct@pipapo.org>
Mon, 22 Oct 2007 14:23:12 +0000 (16:23 +0200)
committerChristian Thaeter <ct@pipapo.org>
Mon, 22 Oct 2007 14:23:12 +0000 (16:23 +0200)
src/main.c
src/rxpd_socket.c

index e3a2173..076c756 100644 (file)
@@ -113,8 +113,8 @@ main (int argc, char** argv)
           int port = atoi (optarg);
           if (port > 0 && port < 65536)
             {
-              rxpd_socket_new_tcp4 (rxpd, NULL, port);
-              // TODO error handling
+              if (!rxpd_socket_new_tcp4 (rxpd, NULL, port))
+                rxpd_fail (rxpd, "Could not open listening socket on port %d\n", port);
             }
           else
             rxpd_fail (rxpd, "Illegal port number\n");
index 8c34c5d..0aadb14 100644 (file)
@@ -43,7 +43,7 @@ rxpd_socket_new_tcp4 (struct rxpd_base* base, const char* addr, unsigned short p
   if (addr)
     {
       if (inet_aton (addr, &listen_addr.sin_addr) == 0)
-        abort();
+        goto esocket;
     }
   else
     listen_addr.sin_addr.s_addr = INADDR_ANY;
@@ -51,14 +51,14 @@ rxpd_socket_new_tcp4 (struct rxpd_base* base, const char* addr, unsigned short p
   listen_addr.sin_port = htons(port);
 
   if (bind (self->fd, (struct sockaddr*)&listen_addr, sizeof (listen_addr)) == -1)
-    abort();
+    goto esocket;
 
   static int yes = 1;
   if (setsockopt (self->fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1)
-    abort ();
+    goto esocket;
 
   if (listen (self->fd, 20) == -1)
-    abort ();
+    goto esocket;
 
   self->rxpd_socket_addr = rxpd_socket_tcp4addr;
 
@@ -67,6 +67,10 @@ rxpd_socket_new_tcp4 (struct rxpd_base* base, const char* addr, unsigned short p
 
   rxpd_log (base, LOG_INFO, "Listening on tcp4:%d\n", port);
   return self;
+
+ esocket:
+  free (self);
+  return NULL;
 }
 
 int