gnunet-svn
[Top][All Lists]
Advanced

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

[libmicrohttpd] 05/05: Fixed (again) and improved detection of applicati


From: gnunet
Subject: [libmicrohttpd] 05/05: Fixed (again) and improved detection of application-provided socket type
Date: Thu, 16 Nov 2023 07:13:17 +0100

This is an automated email from the git hooks/post-receive script.

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

commit 6cb3cc344ec095a2c3a765d23a283e4496f3d879
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Wed Nov 15 17:51:43 2023 +0300

    Fixed (again) and improved detection of application-provided socket type
    
    Moved detection part into socket processing from parameters processing
    part.
---
 src/microhttpd/daemon.c | 74 +++++++++++++++++++++++++++++++++++++------------
 1 file changed, 56 insertions(+), 18 deletions(-)

diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index b55b7feb..e97ddb91 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -7458,24 +7458,8 @@ process_interim_params (struct MHD_Daemon *d,
     }
     else
     {
-#if defined(SO_DOMAIN) && defined(AF_UNIX)
-      int af;
-      socklen_t len = sizeof (af);
-
-      if (0 == getsockopt (d->listen_fd,
-                           SOL_SOCKET,
-                           SO_DOMAIN,
-                           &af,
-                           &len))
-      {
-        d->listen_is_unix = (AF_UNIX == af) ? _MHD_YES : _MHD_NO;
-      }
-      else
-        d->listen_is_unix = _MHD_UNKNOWN;
-#else  /* ! SO_DOMAIN || ! AF_UNIX */
-      d->listen_is_unix = _MHD_UNKNOWN;
-#endif /* ! SO_DOMAIN || ! AF_UNIX */
       d->listen_fd = params->listen_fd;
+      d->listen_is_unix = _MHD_UNKNOWN;
 #ifdef MHD_USE_GETSOCKNAME
       d->port = 0;  /* Force use of autodetection */
 #endif /* MHD_USE_GETSOCKNAME */
@@ -8081,7 +8065,6 @@ MHD_start_daemon_va (unsigned int flags,
 #else /* ! PF_UNIX */
           domain = AF_UNIX;
 #endif /* ! PF_UNIX */
-          domain = PF_UNIX;
         }
         else /* combined with the next 'if' */
 #endif /* AF_UNIX */
@@ -8344,7 +8327,62 @@ MHD_start_daemon_va (unsigned int flags,
   }
   else
   {
+#if defined(SOL_SOCKET) && (defined(SO_DOMAIN) || defined(SO_PROTOCOL_INFOW))
+    int af;
+    int opt_name;
+    void *poptval;
+    socklen_t optval_size;
+#ifdef SO_DOMAIN
+    opt_name = SO_DOMAIN;
+    poptval = &af;
+    optval_size = (socklen_t) sizeof (af);
+#else  /* SO_PROTOCOL_INFOW */
+    WSAPROTOCOL_INFOW prot_info;
+    opt_name = SO_PROTOCOL_INFOW;
+    poptval = &prot_info;
+    optval_size = (socklen_t) sizeof (prot_info);
+#endif /* SO_PROTOCOL_INFOW */
+
+    if (0 == getsockopt (daemon->listen_fd,
+                         SOL_SOCKET,
+                         opt_name,
+                         poptval,
+                         &optval_size))
+    {
+#ifndef SO_DOMAIN
+      af = prot_info.iAddressFamily;
+#endif /* SO_DOMAIN */
+      switch (af)
+      {
+      case AF_INET:
+        daemon->listen_is_unix = _MHD_NO;
+        break;
+#ifdef HAVE_INET6
+      case AF_INET6:
+        *pflags |= MHD_USE_IPv6;
+        daemon->listen_is_unix = _MHD_NO;
+        break;
+#endif /* HAVE_INET6 */
+#ifdef AF_UNIX
+      case AF_UNIX:
+        daemon->port = 0;     /* special value for UNIX domain sockets */
+        daemon->listen_is_unix = _MHD_YES;
+        break;
+#endif /* AF_UNIX */
+      default:
+        daemon->port = 0;     /* ugh */
+        daemon->listen_is_unix = _MHD_UNKNOWN;
+        break;
+      }
+    }
+    else
+#endif /* SOL_SOCKET && (SO_DOMAIN || SO_PROTOCOL_INFOW)) */
+    daemon->listen_is_unix = _MHD_UNKNOWN;
+
     listen_fd = daemon->listen_fd;
+#ifdef MHD_USE_GETSOCKNAME
+    daemon->port = 0;  /* Force use of autodetection */
+#endif /* MHD_USE_GETSOCKNAME */
   }
 
 #ifdef MHD_USE_GETSOCKNAME

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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