diff options
author | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2023-11-12 11:38:57 +0300 |
---|---|---|
committer | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2023-11-12 18:50:22 +0300 |
commit | c7998d3af303dab6cca664c361ea5706ee38bed9 (patch) | |
tree | e648061b4c40300b5cdd60725f24f9f501b8c52d | |
parent | 75dbfbc71634af3dae9b5af1bc1e82fec32062e1 (diff) | |
download | libmicrohttpd-c7998d3af303dab6cca664c361ea5706ee38bed9.tar.gz libmicrohttpd-c7998d3af303dab6cca664c361ea5706ee38bed9.zip |
Fixed ignored daemon port when MHD_OPTION_LISTEN_SOCKET or MHD_OPTION_SOCK_ADDR are used as documented
-rw-r--r-- | src/microhttpd/daemon.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c index 644e134f..6aaeaae4 100644 --- a/src/microhttpd/daemon.c +++ b/src/microhttpd/daemon.c | |||
@@ -7450,6 +7450,9 @@ process_interim_params (struct MHD_Daemon *d, | |||
7450 | d->listen_is_unix = _MHD_UNKNOWN; | 7450 | d->listen_is_unix = _MHD_UNKNOWN; |
7451 | #endif /* ! SO_DOMAIN || ! AF_UNIX */ | 7451 | #endif /* ! SO_DOMAIN || ! AF_UNIX */ |
7452 | d->listen_fd = params->listen_fd; | 7452 | d->listen_fd = params->listen_fd; |
7453 | #ifdef MHD_USE_GETSOCKNAME | ||
7454 | d->port = 0; /* Force use of autodetection */ | ||
7455 | #endif /* MHD_USE_GETSOCKNAME */ | ||
7453 | } | 7456 | } |
7454 | } | 7457 | } |
7455 | return true; | 7458 | return true; |
@@ -8032,6 +8035,43 @@ MHD_start_daemon_va (unsigned int flags, | |||
8032 | servaddr = (struct sockaddr *) &servaddr4; | 8035 | servaddr = (struct sockaddr *) &servaddr4; |
8033 | } | 8036 | } |
8034 | } | 8037 | } |
8038 | else | ||
8039 | { | ||
8040 | #ifdef MHD_USE_GETSOCKNAME | ||
8041 | daemon->port = 0; /* Force use of autodetection */ | ||
8042 | #else /* ! MHD_USE_GETSOCKNAME */ | ||
8043 | switch (servaddr->sa_family) | ||
8044 | { | ||
8045 | case AF_INET: | ||
8046 | { | ||
8047 | struct sockaddr_in sa4; | ||
8048 | memcpy (&sa4, servaddr, sizeof(sa4)); /* Required due to stronger alignment */ | ||
8049 | daemon->port = ntohs (sa4.sin_port); | ||
8050 | break; | ||
8051 | } | ||
8052 | #ifdef HAVE_INET6 | ||
8053 | case AF_INET6: | ||
8054 | { | ||
8055 | struct sockaddr_in6 sa6; | ||
8056 | memcpy (&sa6, servaddr, sizeof(sa6)); /* Required due to stronger alignment */ | ||
8057 | daemon->port = ntohs (sa6.sin6_port); | ||
8058 | mhd_assert (0 != (*pflags & MHD_USE_IPv6)); | ||
8059 | break; | ||
8060 | } | ||
8061 | #endif /* HAVE_INET6 */ | ||
8062 | #ifdef AF_UNIX | ||
8063 | case AF_UNIX: | ||
8064 | daemon->port = 0; /* special value for UNIX domain sockets */ | ||
8065 | daemon->listen_is_unix = _MHD_YES; | ||
8066 | break; | ||
8067 | #endif | ||
8068 | default: | ||
8069 | daemon->port = 0; /* ugh */ | ||
8070 | daemon->listen_is_unix = _MHD_UNKNOWN; | ||
8071 | break; | ||
8072 | } | ||
8073 | #endif /* ! MHD_USE_GETSOCKNAME */ | ||
8074 | } | ||
8035 | daemon->listen_fd = listen_fd; | 8075 | daemon->listen_fd = listen_fd; |
8036 | if (0 != (*pflags & MHD_USE_IPv6)) | 8076 | if (0 != (*pflags & MHD_USE_IPv6)) |
8037 | { | 8077 | { |