Cleanup error handling in ipc_init()
authorHenning Rogge <hrogge@googlemail.com>
Sun, 18 Nov 2012 18:53:27 +0000 (19:53 +0100)
committerHenning Rogge <hrogge@googlemail.com>
Sun, 18 Nov 2012 18:53:27 +0000 (19:53 +0100)
src/ipc_frontend.c
src/main.c

index b6b4157..443fb0e 100644 (file)
@@ -77,7 +77,7 @@ static int ipc_send_net_info(int fd);
  *Create the socket to use for IPC to the
  *GUI front-end
  *
- *@return the socket FD
+ *@return -1 if an error happened, 0 otherwise
  */
 int
 ipc_init(void)
@@ -92,12 +92,13 @@ ipc_init(void)
   /* get an internet domain socket */
   if ((ipc_sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
     perror("IPC socket");
-    olsr_exit("IPC socket", EXIT_FAILURE);
+    return -1;
   }
 
   if (setsockopt(ipc_sock, SOL_SOCKET, SO_REUSEADDR, (char *)&yes, sizeof(yes)) < 0) {
     perror("SO_REUSEADDR failed");
-    olsr_exit("IPC socket", EXIT_FAILURE);
+    close(ipc_sock);
+    return -1;
   }
 
   /* complete the socket structure */
@@ -113,7 +114,8 @@ ipc_init(void)
     sleep(10);
     if (bind(ipc_sock, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
       perror("IPC bind");
-      olsr_exit("IPC bind", EXIT_FAILURE);
+      close(ipc_sock);
+      return -1;
     }
     OLSR_PRINTF(1, "OK\n");
   }
@@ -121,13 +123,14 @@ ipc_init(void)
   /* show that we are willing to listen */
   if (listen(ipc_sock, olsr_cnf->ipc_connections) == -1) {
     perror("IPC listen");
-    olsr_exit("IPC listen", EXIT_FAILURE);
+    close(ipc_sock);
+    return -1;
   }
 
   /* Register the socket with the socket parser */
   add_olsr_socket(ipc_sock, &ipc_accept, NULL, NULL, SP_PR_READ);
 
-  return ipc_sock;
+  return 0;
 }
 
 
index b56bbc5..2d9b3a5 100644 (file)
@@ -554,7 +554,9 @@ int main(int argc, char *argv[]) {
   /* Initialize the IPC socket */
 
   if (olsr_cnf->ipc_connections > 0) {
-    ipc_init();
+    if (ipc_init()) {
+      olsr_exit("ipc_init failure", 1);
+    }
   }
   /* Initialisation of different tables to be used. */
   olsr_init_tables();