Win32 fixes: use CLOSESOCKET to close sockets
authorSven-Ola Tuecke <sven-ola@gmx.de>
Wed, 10 Dec 2008 13:56:44 +0000 (14:56 +0100)
committerSven-Ola Tuecke <sven-ola@gmx.de>
Wed, 10 Dec 2008 13:56:44 +0000 (14:56 +0100)
Note: cygwin/mingw32 uses the win32::closesocket to close sockets

17 files changed:
gui/linux-gtk/src/callbacks.c
gui/linux-gtk/src/common.h
gui/linux-gtk/src/ipc.c
gui/linux-gtk/src/main.c
lib/dot_draw/src/olsrd_dot_draw.c
lib/dyn_gw/src/olsrd_dyn_gw.c
lib/httpinfo/src/olsrd_httpinfo.c
lib/pgraph/src/olsrd_pgraph.c
lib/secure/src/olsrd_secure.c
lib/txtinfo/src/olsrd_txtinfo.c
src/defs.h
src/ipc_frontend.c
src/main.c
src/olsr_switch/main.c
src/olsr_switch/olsr_host_switch.h
src/win32/ifnet.c
src/win32/net.c

index d4d3f40..25a33cf 100644 (file)
@@ -265,8 +265,7 @@ gui_shutdown(GtkObject *object, gpointer user_data)
 {
   printf("Shutting down...\n");
 
-  if(ipc_close() < 0)
-    printf("Could not close socket!\n");
+  ipc_close();
 
   printf("BYE-BYE!\n");
   exit(0);
index 27f0d06..90cef0d 100644 (file)
@@ -151,7 +151,7 @@ remove_nodes_list(union olsr_ip_addr *);
 int
 ipc_connect();
 
-int
+void
 ipc_close();
 
 int
index b09097d..d97f7e8 100644 (file)
@@ -26,7 +26,6 @@
 #include "routes.h"
 
 #ifdef WIN32
-#define close(x) closesocket(x)
 #undef errno
 #define errno WSAGetLastError()
 #undef strerror
 
 int ipc_socket = 0;
 
-int
+void
 ipc_close()
 {
-
-  if(close(ipc_socket))
-    return 1;
-
-  return 0;
+  CLOSESOCKET(ipc_socket);
 }
 
 
@@ -140,7 +135,7 @@ ipc_read()
           shutdown(ipc_socket, SHUT_RDWR);
          set_net_info("Disconnected from server...", TRUE);
           connected = 0;
-         close(ipc_socket);
+         CLOSESOCKET(ipc_socket);
         }
 
       if(bytes > 0)
index 179c288..88cd425 100644 (file)
@@ -138,8 +138,7 @@ shutdown_(int signal)
 {
   printf("Cleaning up...\n");
 
-  if(ipc_close() < 0)
-    printf("Could not close socket!\n");
+  ipc_close();
 
   printf("BYE-BYE!\n");
   exit(signal);
index a596721..65487fb 100644 (file)
 #include <stdarg.h>
 #endif
 
-
-#ifdef WIN32
-#define close(x) closesocket(x)
-#endif
-
 #ifdef _WRS_KERNEL
 static int ipc_open;
 static int ipc_socket_up;
@@ -134,7 +129,7 @@ void olsr_plugin_exit(void)
 #endif
 {
   if (ipc_socket != -1) {
-    CLOSE(ipc_socket);
+    CLOSESOCKET(ipc_socket);
   }
 }
 
@@ -178,7 +173,7 @@ plugin_ipc_init(void)
   uint32_t yes = 1;
 
   if (ipc_socket != -1) {
-    close(ipc_socket);
+    CLOSESOCKET(ipc_socket);
   }
 
   /* Init ipc socket */
@@ -190,14 +185,14 @@ plugin_ipc_init(void)
 
   if (setsockopt(ipc_socket, SOL_SOCKET, SO_REUSEADDR, (char *)&yes, sizeof(yes)) < 0) {
     perror("SO_REUSEADDR failed");
-    CLOSE(ipc_socket);
+    CLOSESOCKET(ipc_socket);
     return 0;
   }
 
 #if defined __FreeBSD__ && defined SO_NOSIGPIPE
   if (setsockopt(ipc_socket, SOL_SOCKET, SO_NOSIGPIPE, (char *)&yes, sizeof(yes)) < 0) {
     perror("SO_REUSEADDR failed");
-    CLOSE(ipc_socket);
+    CLOSESOCKET(ipc_socket);
     return 0;
   }
 #endif
@@ -213,14 +208,14 @@ plugin_ipc_init(void)
   /* bind the socket to the port number */
   if (bind(ipc_socket, (struct sockaddr *) &addr, sizeof(addr)) == -1) {
     olsr_printf(1, "(DOT DRAW)IPC bind %s\n", strerror(errno));
-    CLOSE(ipc_socket);
+    CLOSESOCKET(ipc_socket);
     return 0;
   }
 
   /* show that we are willing to listen */
   if (listen(ipc_socket, 1) == -1) {
     olsr_printf(1, "(DOT DRAW)IPC listen %s\n", strerror(errno));
-    CLOSE(ipc_socket);
+    CLOSESOCKET(ipc_socket);
     return 0;
   }
 
@@ -247,13 +242,13 @@ ipc_action(int fd __attribute__((unused)), void *data __attribute__((unused)), u
 #ifndef _WRS_KERNEL
   if (!ip4equal(&pin.sin_addr, &ipc_accept_ip.v4)) {
     olsr_printf(0, "Front end-connection from foreign host (%s) not allowed!\n", inet_ntoa(pin.sin_addr));
-    close(ipc_connection);
+    CLOSESOCKET(ipc_connection);
     return;
   }
 #endif
   olsr_printf(1, "(DOT DRAW)IPC: Connection from %s\n", inet_ntoa(pin.sin_addr));
   pcf_event(ipc_connection, 1, 1, 1);
-  close(ipc_connection); /* close connection after one output */
+  CLOSESOCKET(ipc_connection); /* close connection after one output */
 }
 
 
@@ -361,7 +356,7 @@ defined _WRS_KERNEL
 #endif
     if (send(ipc_connection, data, size, FLAGS) == -1) {
       olsr_printf(1, "(DOT DRAW)IPC connection lost!\n");
-      close(ipc_connection);
+      CLOSESOCKET(ipc_connection);
     }
   }
 }
index ff19cf4..3090cbe 100644 (file)
@@ -62,8 +62,6 @@
 #include <windows.h>
 #undef interface
 
-#define close(x) closesocket(x)
-
 typedef HANDLE pthread_mutex_t;
 typedef HANDLE pthread_t;
 
index d5a8634..098e437 100644 (file)
@@ -75,7 +75,6 @@
 #endif
 
 #ifdef WIN32
-#define close(x) closesocket(x)
 #define OS "Windows"
 #endif
 #ifdef linux
@@ -275,7 +274,7 @@ get_http_socket(int port)
 #ifndef NODEBUG
     olsr_printf(1, "(HTTPINFO)SO_REUSEADDR failed %s\n", strerror(errno));
 #endif
-    CLOSE(s);
+    CLOSESOCKET(s);
     return -1;
   }
 
@@ -308,7 +307,7 @@ get_http_socket(int port)
 #ifndef NODEBUG
     olsr_printf(1, "(HTTPINFO) bind failed %s\n", strerror(errno));
 #endif
-    CLOSE(s);
+    CLOSESOCKET(s);
     return -1;
   }
 
@@ -317,7 +316,7 @@ get_http_socket(int port)
 #ifndef NODEBUG
     olsr_printf(1, "(HTTPINFO) listen failed %s\n", strerror(errno));
 #endif
-    CLOSE(s);
+    CLOSESOCKET(s);
     return -1;
   }
 
@@ -599,7 +598,7 @@ parse_http_request(int fd, void *data __attribute__((unused)), unsigned int flag
  close_connection:
   abuf_free(&body);
   abuf_free(&header);
-  close(client_sockets[curr_clients]);
+  CLOSESOCKET(client_sockets[curr_clients]);
   curr_clients--;
 }
 
@@ -693,7 +692,7 @@ void
 olsr_plugin_exit(void)
 {
   if (http_socket >= 0) {
-    CLOSE(http_socket);
+    CLOSESOCKET(http_socket);
   }
 }
 
index d2494fd..823db32 100644 (file)
@@ -54,9 +54,6 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <errno.h>
-#ifdef WIN32
-#define close(x) closesocket(x)
-#endif
 
 #define PLUGIN_NAME    "OLSRD pgraph plugin"
 #define PLUGIN_VERSION "0.1"
@@ -113,11 +110,11 @@ void
 my_fini(void)
 {
   if(ipc_socket >= 0) {
-    close(ipc_socket);
+    CLOSESOCKET(ipc_socket);
     ipc_socket = -1;
   }
   if(ipc_connection >= 0) {
-    close(ipc_connection);
+    CLOSESOCKET(ipc_connection);
     ipc_connection = -1;
   }
 
@@ -289,7 +286,7 @@ static void ipc_action(int fd __attribute__((unused)), void *data __attribute__(
       if(ntohl(pin.sin_addr.s_addr) != ntohl(ipc_accept_ip.s_addr))
        {
          olsr_printf(1, "Front end-connection from foregin host(%s) not allowed!\n", addr);
-         close(ipc_connection);
+         CLOSESOCKET(ipc_connection);
          return;
        }
       else
@@ -397,7 +394,7 @@ static int ipc_send(const char *data, int size)
   if (send(ipc_connection, data, size, FLAG) < 0)
     {
       olsr_printf(1, "(DOT DRAW)IPC connection lost!\n");
-      close(ipc_connection);
+      CLOSESOCKET(ipc_connection);
       ipc_connection = -1;
       return -1;
     }
index 05eeb61..ff88db3 100644 (file)
@@ -91,7 +91,6 @@ MD5_checksum(const uint8_t *data, const uint16_t data_len, uint8_t *hashbuf)
 #endif
 
 #ifdef WIN32
-#define close(x) closesocket(x)
 #undef EWOULDBLOCK
 #define EWOULDBLOCK WSAEWOULDBLOCK
 #define OS "Windows"
index 3f9889c..0adfb94 100644 (file)
@@ -74,7 +74,6 @@
 #define SHUT_WR SD_SEND
 #undef strerror
 #define strerror(x) StrError(x)
-#define close(x) closesocket(x)
 #define read(fd,buf,size) recv((fd), (buf), (size), 0)
 #define write(fd,buf,size) send((fd), (buf), (size), 0)
 #endif
@@ -132,7 +131,7 @@ static int ipc_print_mid(struct ipc_conn *);
  */
 void olsr_plugin_exit(void)
 {
-    CLOSE(listen_socket);
+    CLOSESOCKET(listen_socket);
 }
 
 /**
@@ -160,14 +159,14 @@ olsrd_plugin_init(void)
 #ifndef NODEBUG
         olsr_printf(1, "(TXTINFO) setsockopt()=%s\n", strerror(errno));
 #endif
-        CLOSE(listen_socket);
+        CLOSESOCKET(listen_socket);
         return 0;
     }
 
 #if defined __FreeBSD__ && defined SO_NOSIGPIPE
     if (setsockopt(listen_socket, SOL_SOCKET, SO_NOSIGPIPE, (char *)&yes, sizeof(yes)) < 0) {
         perror("SO_REUSEADDR failed");
-        CLOSE(listen_socket);
+        CLOSESOCKET(listen_socket);
         return 0;
     }
 #endif
@@ -200,7 +199,7 @@ olsrd_plugin_init(void)
 #ifndef NODEBUG
         olsr_printf(1, "(TXTINFO) bind()=%s\n", strerror(errno));
 #endif
-        CLOSE(listen_socket);
+        CLOSESOCKET(listen_socket);
         return 0;
     }
 
@@ -209,7 +208,7 @@ olsrd_plugin_init(void)
 #ifndef NODEBUG
         olsr_printf(1, "(TXTINFO) listen()=%s\n", strerror(errno));
 #endif
-        CLOSE(listen_socket);
+        CLOSESOCKET(listen_socket);
         return 0;
     }
 
@@ -232,7 +231,7 @@ static void conn_destroy(struct ipc_conn *conn)
 static void kill_connection(int fd, struct ipc_conn *conn)
 {
     remove_olsr_socket(fd, NULL, &ipc_http);
-    CLOSE(fd);
+    CLOSESOCKET(fd);
     conn_destroy(conn);
 }
 
@@ -259,7 +258,7 @@ static void ipc_action(int fd, void *data __attribute__((unused)), unsigned int
         }
         if (!ip4equal(&addr4->sin_addr, &ipc_accept_ip.v4)) {
             olsr_printf(1, "(TXTINFO) From host(%s) not allowed!\n", addr);
-            CLOSE(http_connection);
+            CLOSESOCKET(http_connection);
             return;
         }
     } else {
@@ -271,7 +270,7 @@ static void ipc_action(int fd, void *data __attribute__((unused)), unsigned int
         if (!ip6equal(&in6addr_any, &ipc_accept_ip.v6) &&
            !ip6equal(&addr6->sin6_addr, &ipc_accept_ip.v6)) {
             olsr_printf(1, "(TXTINFO) From host(%s) not allowed!\n", addr);
-            CLOSE(http_connection);
+            CLOSESOCKET(http_connection);
             return;
         }
     }
@@ -281,14 +280,14 @@ static void ipc_action(int fd, void *data __attribute__((unused)), unsigned int
 
     /* make the fd non-blocking */
     if (set_nonblocking(http_connection) < 0) {
-        CLOSE(http_connection);
+        CLOSESOCKET(http_connection);
         return;
     }
 
     conn = malloc(sizeof(*conn));
     if (conn == NULL) {
         olsr_syslog(OLSR_LOG_ERR, "(TXTINFO) Out of memory!");
-        CLOSE(http_connection);
+        CLOSESOCKET(http_connection);
         return;
     }
     conn->requlen = 0;
index 9db474d..404b048 100644 (file)
@@ -118,8 +118,11 @@ extern FILE *debug_handle;
     (elem)->next->prev = (elem)->prev;     \
   } while (0)
 
-
-#define CLOSE(fd)  do { close(fd); (fd) = -1; } while (0)
+#ifdef WIN32
+#define CLOSESOCKET(fd)  do { closesocket(fd); (fd) = -1; } while (0)
+#else
+#define CLOSESOCKET(fd)  do { close(fd); (fd) = -1; } while (0)
+#endif
 
 enum app_state {
   STATE_RUNNING,
index 4e08ada..52658da 100644 (file)
@@ -58,7 +58,6 @@
 #include <stdlib.h>
 
 #ifdef WIN32
-#define close(x) closesocket(x)
 #define perror(x) WinSockPError(x)
 void
 WinSockPError(const char *);
@@ -221,7 +220,7 @@ ipc_accept(int fd, void *data __attribute__((unused)), unsigned int flags __attr
     } else {
       OLSR_PRINTF(1, "Front end-connection from foregin host(%s) not allowed!\n", addr);
       olsr_syslog(OLSR_LOG_ERR, "OLSR: Front end-connection from foregin host(%s) not allowed!\n", addr);
-      CLOSE(ipc_conn);
+      CLOSESOCKET(ipc_conn);
     }
   }
 }
@@ -266,7 +265,7 @@ frontend_msgparser(union olsr_message *msg,
     const size_t len = olsr_cnf->ip_version == AF_INET ? ntohs(msg->v4.olsr_msgsize) : ntohs(msg->v6.olsr_msgsize);
     if (send(ipc_conn, (void *)msg, len, MSG_NOSIGNAL) < 0) {
       OLSR_PRINTF(1, "(OUTPUT)IPC connection lost!\n");
-      CLOSE(ipc_conn);
+      CLOSESOCKET(ipc_conn);
     }
   }
   return true;
@@ -334,7 +333,7 @@ ipc_route_send_rtentry(const union olsr_ip_addr *dst,
 
   if (send(ipc_conn, (void *)&packet, IPC_PACK_SIZE, MSG_NOSIGNAL) < 0) { // MSG_NOSIGNAL to avoid sigpipe
     OLSR_PRINTF(1, "(RT_ENTRY)IPC connection lost!\n");
-    CLOSE(ipc_conn);
+    CLOSESOCKET(ipc_conn);
     return -1;
   }
 
@@ -371,7 +370,7 @@ ipc_send_all_routes(int fd)
     /* MSG_NOSIGNAL to avoid sigpipe */
     if (send(fd, (void *)&packet, IPC_PACK_SIZE, MSG_NOSIGNAL) < 0) {
       OLSR_PRINTF(1, "(RT_ENTRY)IPC connection lost!\n");
-      CLOSE(ipc_conn);
+      CLOSESOCKET(ipc_conn);
       return -1;
     }
   } OLSR_FOR_ALL_RT_ENTRIES_END(rt);
@@ -442,7 +441,7 @@ ipc_send_net_info(int fd)
 
   if (send(fd, (void *)&net_msg, sizeof(net_msg), MSG_NOSIGNAL) < 0) {
     OLSR_PRINTF(1, "(NETINFO)IPC connection lost!\n");
-    CLOSE(ipc_conn);
+    CLOSESOCKET(ipc_conn);
     return -1;
   }
   return 0;
@@ -454,8 +453,7 @@ void
 shutdown_ipc(void)
 {
   OLSR_PRINTF(1, "Shutting down IPC...\n");
-  CLOSE(ipc_sock);
-  CLOSE(ipc_conn);
+  CLOSESOCKET(ipc_conn);
 }
 
 /*
index c1a1796..4ff1cd5 100644 (file)
@@ -69,7 +69,6 @@
 #endif
 
 #ifdef WIN32
-#define close(x) closesocket(x)
 int __stdcall SignalHandler(unsigned long signo);
 void ListInterfaces(void);
 void DisableIcmpRedirects(void);
@@ -461,7 +460,7 @@ olsr_shutdown(void)
 
   /* OLSR sockets */
   OLSR_FOR_ALL_INTERFACES(ifn) {
-    close(ifn->olsr_socket);
+    CLOSESOCKET(ifn->olsr_socket);
   } OLSR_FOR_ALL_INTERFACES_END(ifn);
 
   /* Closing plug-ins */
@@ -474,15 +473,15 @@ olsr_shutdown(void)
   restore_settings(olsr_cnf->ip_version);
 
   /* ioctl socket */
-  close(olsr_cnf->ioctl_s);
+  CLOSESOCKET(olsr_cnf->ioctl_s);
 
 #if defined linux
-  close(olsr_cnf->rts_linux);
+  CLOSESOCKET(olsr_cnf->rts_linux);
 #endif
 
 #if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
   /* routing socket */
-  close(olsr_cnf->rts_bsd);
+  CLOSESOCKET(olsr_cnf->rts_bsd);
 #endif
 
   /* Free cookies and memory pools attached. */
index 246a15f..84f1c38 100644 (file)
@@ -63,7 +63,6 @@
 #define errno WSAGetLastError()
 #undef strerror
 #define strerror(x) StrError(x)
-#define close(x) closesocket(x)
 #else
 #include <sys/wait.h>
 #endif
@@ -113,7 +112,7 @@ ohs_close(int signo __attribute__((unused)))
 {
   printf("OHS: exit\n");
 
-  close(srv_socket);
+  CLOSESOCKET(srv_socket);
 
   exit(0);
 }
@@ -181,7 +180,7 @@ ohs_init_new_connection(int s)
       struct ipaddr_str addrstr;
       printf("IP: %s DUPLICATE! Disconecting client!\n", olsr_ip_to_string(&addrstr, &oc->ip_addr));
     }
-    close(s);
+    CLOSESOCKET(s);
     free(oc);
     return -1;
   }
@@ -199,7 +198,7 @@ ohs_delete_connection(struct ohs_connection *oc)
     return -1;
   }
   /* Close the socket */
-  close(oc->socket);
+  CLOSESOCKET(oc->socket);
 
   if(logbits & LOG_CONNECT) {
     struct ipaddr_str addrstr;
@@ -292,7 +291,7 @@ ohs_init_connect_sockets(void)
                (char *)&yes, sizeof(yes)) < 0)
     {
       printf("SO_REUSEADDR failed for socket: %s\n", strerror(errno));
-      close(srv_socket);
+      CLOSESOCKET(srv_socket);
       exit(0);
     }
 
@@ -306,7 +305,7 @@ ohs_init_connect_sockets(void)
   if (bind(srv_socket, (struct sockaddr *) &sin4, sizeof(sin4)) == -1)
     {
       printf("bind failed for socket: %s\n", strerror(errno));
-      close(srv_socket);
+      CLOSESOCKET(srv_socket);
       exit(0);
     }
 
@@ -314,7 +313,7 @@ ohs_init_connect_sockets(void)
   if (listen(srv_socket, 5) == -1)
     {
       printf("listen failed for socket: %s\n", strerror(errno));
-      close(srv_socket);
+      CLOSESOCKET(srv_socket);
       exit(0);
     }
   return 1;
index b2c9b69..e12c9f9 100644 (file)
@@ -52,7 +52,6 @@
 #define OHS_OUT_OF_MEMORY(s) do { printf("ohsd: out of memory \"%s\"!\n", s); ohs_close(0); } while (0)
 
 #ifdef WIN32
-#define close(x) closesocket(x)
 int __stdcall ohs_close(unsigned long signal) __attribute__((noreturn));
 #else
 void ohs_close(int) __attribute__((noreturn));
index fc54b32..90522d8 100644 (file)
@@ -570,7 +570,7 @@ void RemoveInterface(struct olsr_if *IntConf)
   IntConf->interf = NULL;
 
   remove_olsr_socket(Int->olsr_socket, &olsr_input, NULL);
-  closesocket(Int->olsr_socket);
+  CLOSESOCKET(Int->olsr_socket);
 
   unlock_interface(Int);
 
index 5393d2b..c56ccf7 100644 (file)
@@ -90,7 +90,7 @@ gethemusocket(struct sockaddr_in *pin)
       printf("FAILED\n");
       fprintf(stderr, "Error connecting %d - %s\n", errno, strerror(errno));
       printf("connection refused\n");
-      closesocket(sock);
+      CLOSESOCKET(sock);
       return (-1);
     }
 
@@ -116,7 +116,7 @@ int getsocket(int BuffSize, char *Int __attribute__((unused)))
                  (char *)&On, sizeof (On)) < 0)
   {
     WinSockPError("getsocket/setsockopt(SO_BROADCAST)");
-    closesocket(Sock);
+    CLOSESOCKET(Sock);
     return -1;
   }
 
@@ -124,7 +124,7 @@ int getsocket(int BuffSize, char *Int __attribute__((unused)))
                  (char *)&On, sizeof (On)) < 0)
   {
     WinSockPError("getsocket/setsockopt(SO_REUSEADDR)");
-    closesocket(Sock);
+    CLOSESOCKET(Sock);
     return -1;
   }
 
@@ -147,14 +147,14 @@ int getsocket(int BuffSize, char *Int __attribute__((unused)))
   if (bind(Sock, (struct sockaddr *)&Addr, sizeof (Addr)) < 0)
   {
     WinSockPError("getsocket/bind()");
-    closesocket(Sock);
+    CLOSESOCKET(Sock);
     return -1;
   }
 
   if (WSAIoctl(Sock, FIONBIO, &On, sizeof (On), NULL, 0, &Len, NULL, NULL) < 0)
   {
     WinSockPError("WSAIoctl");
-    closesocket(Sock);
+    CLOSESOCKET(Sock);
     return -1;
   }
 
@@ -176,7 +176,7 @@ int getsocket6(int BuffSize, char *Int __attribute__((unused)))
                  (char *)&On, sizeof (On)) < 0)
   {
     WinSockPError("getsocket6/setsockopt(SO_BROADCAST)");
-    closesocket(Sock);
+    CLOSESOCKET(Sock);
     return -1;
   }
 
@@ -184,7 +184,7 @@ int getsocket6(int BuffSize, char *Int __attribute__((unused)))
                  (char *)&On, sizeof (On)) < 0)
   {
     WinSockPError("getsocket6/setsockopt(SO_REUSEADDR)");
-    closesocket(Sock);
+    CLOSESOCKET(Sock);
     return -1;
   }
 
@@ -207,7 +207,7 @@ int getsocket6(int BuffSize, char *Int __attribute__((unused)))
   if (bind(Sock, (struct sockaddr *)&Addr6, sizeof (Addr6)) < 0)
   {
     WinSockPError("getsocket6/bind()");
-    closesocket(Sock);
+    CLOSESOCKET(Sock);
     return -1;
   }