[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 = ⁡
+ 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.