gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r37847 - libmicrohttpd/src/microhttpd


From: gnunet
Subject: [GNUnet-SVN] r37847 - libmicrohttpd/src/microhttpd
Date: Tue, 30 Aug 2016 17:40:35 +0200

Author: Karlson2k
Date: 2016-08-30 17:40:34 +0200 (Tue, 30 Aug 2016)
New Revision: 37847

Modified:
   libmicrohttpd/src/microhttpd/daemon.c
   libmicrohttpd/src/microhttpd/mhd_itc.c
   libmicrohttpd/src/microhttpd/mhd_itc.h
   libmicrohttpd/src/microhttpd/mhd_sockets.c
   libmicrohttpd/src/microhttpd/mhd_sockets.h
Log:
Moved implementation of W32 socketpair to mhd_sockets.h/.c
Now MHD_socket_pair_() is abstraction of pair of sockets.

Modified: libmicrohttpd/src/microhttpd/daemon.c
===================================================================
--- libmicrohttpd/src/microhttpd/daemon.c       2016-08-30 11:02:34 UTC (rev 
37846)
+++ libmicrohttpd/src/microhttpd/daemon.c       2016-08-30 15:40:34 UTC (rev 
37847)
@@ -4031,7 +4031,7 @@
     use_pipe = 0; /* useless if we are using 'external' select */
   if (use_pipe)
   {
-    if (0 != MHD_pipe_ (daemon->wpipe))
+    if (!MHD_pipe_ (daemon->wpipe))
     {
 #ifdef HAVE_MESSAGES
       MHD_DLOG (daemon,
@@ -4561,7 +4561,7 @@
           /* Always use individual control pipes */
           if (1)
             {
-              if (0 != MHD_pipe_ (d->wpipe))
+              if (!MHD_pipe_ (d->wpipe))
                 {
 #ifdef HAVE_MESSAGES
                   MHD_DLOG (daemon,

Modified: libmicrohttpd/src/microhttpd/mhd_itc.c
===================================================================
--- libmicrohttpd/src/microhttpd/mhd_itc.c      2016-08-30 11:02:34 UTC (rev 
37846)
+++ libmicrohttpd/src/microhttpd/mhd_itc.c      2016-08-30 15:40:34 UTC (rev 
37847)
@@ -31,87 +31,6 @@
 #endif /* HAVE_UNISTD_H */
 #include <fcntl.h>
 
-#if defined(_WIN32) && !defined(__CYGWIN__)
-/**
- * Create pair of mutually connected TCP/IP sockets on loopback address
- * @param sockets_pair array to receive resulted sockets
- * @return zero on success, -1 otherwise
- */
-int MHD_W32_pair_of_sockets_(SOCKET sockets_pair[2])
-{
-  int i;
-  if (!sockets_pair)
-    {
-      errno = EINVAL;
-      return -1;
-    }
-
-#define PAIRMAXTRYIES 800
-  for (i = 0; i < PAIRMAXTRYIES; i++)
-    {
-      struct sockaddr_in listen_addr;
-      SOCKET listen_s;
-      static const int c_addinlen = sizeof(struct sockaddr_in); /* help 
compiler to optimize */
-      int addr_len = c_addinlen;
-      int opt = 1;
-
-      listen_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-      if (INVALID_SOCKET == listen_s)
-        break; /* can't create even single socket */
-
-      listen_addr.sin_family = AF_INET;
-      listen_addr.sin_port = htons(0);
-      listen_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-      if (0 == bind(listen_s, (struct sockaddr*) &listen_addr, c_addinlen)
-          && 0 == listen(listen_s, 1)
-          && 0 == getsockname(listen_s, (struct sockaddr*) &listen_addr,
-                  &addr_len))
-        {
-          SOCKET client_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-          if (INVALID_SOCKET != client_s)
-            {
-              if (0 == ioctlsocket(client_s, FIONBIO, (u_long*) &opt)
-                  && (0 == connect(client_s, (struct sockaddr*) &listen_addr, 
c_addinlen)
-                      || WSAGetLastError() == WSAEWOULDBLOCK))
-                {
-                  struct sockaddr_in accepted_from_addr;
-                  SOCKET server_s;
-                  addr_len = c_addinlen;
-                  server_s = accept(listen_s,
-                      (struct sockaddr*) &accepted_from_addr, &addr_len);
-                  if (INVALID_SOCKET != server_s)
-                    {
-                      struct sockaddr_in client_addr;
-                      addr_len = c_addinlen;
-                      opt = 0;
-                      if (0 == getsockname(client_s, (struct sockaddr*) 
&client_addr, &addr_len)
-                          && accepted_from_addr.sin_family == 
client_addr.sin_family
-                          && accepted_from_addr.sin_port == 
client_addr.sin_port
-                          && accepted_from_addr.sin_addr.s_addr == 
client_addr.sin_addr.s_addr
-                          && 0 == ioctlsocket(client_s, FIONBIO, (u_long*) 
&opt)
-                          && 0 == ioctlsocket(server_s, FIONBIO, (u_long*) 
&opt))
-                        {
-                          closesocket(listen_s);
-                          sockets_pair[0] = client_s;
-                          sockets_pair[1] = server_s;
-                          return 0;
-                        }
-                      closesocket(server_s);
-                    }
-                }
-              closesocket(client_s);
-            }
-        }
-      closesocket(listen_s);
-    }
-
-  sockets_pair[0] = INVALID_SOCKET;
-  sockets_pair[1] = INVALID_SOCKET;
-  return -1;
-}
-
-#endif /* _WIN32 && ! __CYGWIN__ */
-
 #ifndef MHD_DONT_USE_PIPES
 #if !defined(_WIN32) || defined(__CYGWIN__)
 

Modified: libmicrohttpd/src/microhttpd/mhd_itc.h
===================================================================
--- libmicrohttpd/src/microhttpd/mhd_itc.h      2016-08-30 11:02:34 UTC (rev 
37846)
+++ libmicrohttpd/src/microhttpd/mhd_itc.h      2016-08-30 15:40:34 UTC (rev 
37847)
@@ -57,13 +57,9 @@
 /* MHD_pipe_ create pipe (!MHD_DONT_USE_PIPES) /
  *           create two connected sockets (MHD_DONT_USE_PIPES) */
 #ifndef MHD_DONT_USE_PIPES
-#  define MHD_pipe_(fdarr) pipe((fdarr))
+#  define MHD_pipe_(fdarr) (!pipe((fdarr)))
 #else /* MHD_DONT_USE_PIPES */
-#  if !defined(_WIN32) || defined(__CYGWIN__)
-#    define MHD_pipe_(fdarr) socketpair(AF_LOCAL, SOCK_STREAM, 0, (fdarr))
-#  else /* !defined(_WIN32) || defined(__CYGWIN__) */
-#    define MHD_pipe_(fdarr) MHD_W32_pair_of_sockets_((fdarr))
-#  endif /* !defined(_WIN32) || defined(__CYGWIN__) */
+#  define MHD_pipe_(fdarr) MHD_socket_pair_((fdarr))
 #endif /* MHD_DONT_USE_PIPES */
 
 /* MHD_pipe_last_strerror_ is description string of last errno 
(!MHD_DONT_USE_PIPES) /
@@ -105,15 +101,6 @@
 #  define MHD_INVALID_PIPE_ MHD_INVALID_SOCKET
 #endif
 
-#if defined(_WIN32) && !defined(__CYGWIN__)
-/**
- * Create pair of mutually connected TCP/IP sockets on loopback address
- * @param sockets_pair array to receive resulted sockets
- * @return zero on success, -1 otherwise
- */
-int MHD_W32_pair_of_sockets_(SOCKET sockets_pair[2]);
-#endif /* _WIN32 && ! __CYGWIN__ */
-
 #ifndef MHD_DONT_USE_PIPES
 /**
  * Change itc FD options to be non-blocking.

Modified: libmicrohttpd/src/microhttpd/mhd_sockets.c
===================================================================
--- libmicrohttpd/src/microhttpd/mhd_sockets.c  2016-08-30 11:02:34 UTC (rev 
37846)
+++ libmicrohttpd/src/microhttpd/mhd_sockets.c  2016-08-30 15:40:34 UTC (rev 
37847)
@@ -238,6 +238,86 @@
 }
 
 
+/**
+ * Create pair of mutually connected TCP/IP sockets on loopback address
+ * @param sockets_pair array to receive resulted sockets
+ * @return non-zero if succeeded, zero otherwise
+ */
+int MHD_W32_socket_pair_(SOCKET sockets_pair[2])
+{
+  int i;
+  if (!sockets_pair)
+    {
+      WSASetLastError(WSAEFAULT);
+      return 0;
+    }
+
+#define PAIRMAXTRYIES 800
+  for (i = 0; i < PAIRMAXTRYIES; i++)
+    {
+      struct sockaddr_in listen_addr;
+      SOCKET listen_s;
+      static const int c_addinlen = sizeof(struct sockaddr_in); /* help 
compiler to optimize */
+      int addr_len = c_addinlen;
+      int opt = 1;
+
+      listen_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+      if (INVALID_SOCKET == listen_s)
+        break; /* can't create even single socket */
+
+      listen_addr.sin_family = AF_INET;
+      listen_addr.sin_port = 0; /* same as htons(0) */
+      listen_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+      if (0 == bind(listen_s, (struct sockaddr*) &listen_addr, c_addinlen)
+          && 0 == listen(listen_s, 1)
+          && 0 == getsockname(listen_s, (struct sockaddr*) &listen_addr,
+                  &addr_len))
+        {
+          SOCKET client_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+          if (INVALID_SOCKET != client_s)
+            {
+              if (0 == ioctlsocket(client_s, FIONBIO, (u_long*) &opt)
+                  && (0 == connect(client_s, (struct sockaddr*) &listen_addr, 
c_addinlen)
+                      || WSAGetLastError() == WSAEWOULDBLOCK))
+                {
+                  struct sockaddr_in accepted_from_addr;
+                  SOCKET server_s;
+                  addr_len = c_addinlen;
+                  server_s = accept(listen_s,
+                      (struct sockaddr*) &accepted_from_addr, &addr_len);
+                  if (INVALID_SOCKET != server_s)
+                    {
+                      struct sockaddr_in client_addr;
+                      addr_len = c_addinlen;
+                      opt = 0;
+                      if (0 == getsockname(client_s, (struct sockaddr*) 
&client_addr, &addr_len)
+                          && accepted_from_addr.sin_family == 
client_addr.sin_family
+                          && accepted_from_addr.sin_port == 
client_addr.sin_port
+                          && accepted_from_addr.sin_addr.s_addr == 
client_addr.sin_addr.s_addr
+                          && 0 == ioctlsocket(client_s, FIONBIO, (u_long*) 
&opt)
+                          && 0 == ioctlsocket(server_s, FIONBIO, (u_long*) 
&opt))
+                        {
+                          closesocket(listen_s);
+                          sockets_pair[0] = client_s;
+                          sockets_pair[1] = server_s;
+                          return !0;
+                        }
+                      closesocket(server_s);
+                    }
+                }
+              closesocket(client_s);
+            }
+        }
+      closesocket(listen_s);
+    }
+
+  sockets_pair[0] = INVALID_SOCKET;
+  sockets_pair[1] = INVALID_SOCKET;
+  WSASetLastError(WSAECONNREFUSED);
+
+  return 0;
+}
+
 #endif /* MHD_WINSOCK_SOCKETS */
 
 

Modified: libmicrohttpd/src/microhttpd/mhd_sockets.h
===================================================================
--- libmicrohttpd/src/microhttpd/mhd_sockets.h  2016-08-30 11:02:34 UTC (rev 
37846)
+++ libmicrohttpd/src/microhttpd/mhd_sockets.h  2016-08-30 15:40:34 UTC (rev 
37847)
@@ -571,6 +571,21 @@
 
 /* Socket functions */
 
+#if defined(MHD_POSIX_SOCKETS) && defined(AF_LOCAL)
+#  define MHD_socket_pair_(fdarr) (!socketpair(AF_LOCAL, SOCK_STREAM, 0, 
(fdarr)))
+#elif defined(MHD_POSIX_SOCKETS) && defined(AF_UNIX)
+#  define MHD_socket_pair_(fdarr) (!socketpair(AF_UNIX, SOCK_STREAM, 0, 
(fdarr)))
+#elif defined(MHD_WINSOCK_SOCKETS)
+   /**
+    * Create pair of mutually connected TCP/IP sockets on loopback address
+    * @param sockets_pair array to receive resulted sockets
+    * @return non-zero if succeeded, zero otherwise
+    */
+   int MHD_W32_socket_pair_(SOCKET sockets_pair[2]);
+
+#  define MHD_socket_pair_(fdarr) MHD_W32_pair_of_sockets_((fdarr))
+#endif
+
 /**
  * Add @a fd to the @a set.  If @a fd is
  * greater than @a max_fd, set @a max_fd to @a fd.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]