servers: sync socket type global variables

Replace `ipv_inuse` and `use_ipv6` with `socket_type` and
`socket_domain` (where missing) to avoid dupliicate globals with
overlapping purposes. The replacement variables also support Unix
sockets.

Also:
- simplify/reduce IPv6 guards.
- socksd: fix to reset `socket_domain` for `--ipv4` option.

Closes #22498
This commit is contained in:
Viktor Szakats 2026-08-06 07:59:29 +02:00
parent 133785b159
commit 1637bbc9ce
No known key found for this signature in database
9 changed files with 116 additions and 160 deletions

View file

@ -829,16 +829,14 @@ static int test_dnsd(int argc, const char **argv)
logdir = argv[arg++];
}
else if(!strcmp("--ipv4", argv[arg])) {
#ifdef USE_IPV6
ipv_inuse = "IPv4";
use_ipv6 = FALSE;
#endif
socket_type = "IPv4";
socket_domain = AF_INET;
arg++;
}
else if(!strcmp("--ipv6", argv[arg])) {
#ifdef USE_IPV6
ipv_inuse = "IPv6";
use_ipv6 = TRUE;
socket_type = "IPv6";
socket_domain = AF_INET6;
#endif
arg++;
}
@ -868,16 +866,14 @@ static int test_dnsd(int argc, const char **argv)
}
snprintf(loglockfile, sizeof(loglockfile), "%s/%s/dnsd-%s.lock",
logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
logdir, SERVERLOGS_LOCKDIR, socket_type);
#ifdef USE_IPV6
if(!use_ipv6)
if(socket_domain == AF_INET6)
sock = socket(AF_INET6, SOCK_DGRAM, 0);
else
#endif
sock = socket(AF_INET, SOCK_DGRAM, 0);
#ifdef USE_IPV6
else
sock = socket(AF_INET6, SOCK_DGRAM, 0);
#endif
if(sock == CURL_SOCKET_BAD) {
sockerr = SOCKERRNO;
@ -897,23 +893,22 @@ static int test_dnsd(int argc, const char **argv)
}
#ifdef USE_IPV6
if(!use_ipv6) {
#endif
memset(&me.sa4, 0, sizeof(me.sa4));
me.sa4.sin_family = AF_INET;
me.sa4.sin_addr.s_addr = INADDR_ANY;
me.sa4.sin_port = htons(port);
rc = bind(sock, &me.sa, sizeof(me.sa4));
#ifdef USE_IPV6
}
else {
if(socket_domain == AF_INET6) {
memset(&me.sa6, 0, sizeof(me.sa6));
me.sa6.sin6_family = AF_INET6;
me.sa6.sin6_addr = in6addr_any;
me.sa6.sin6_port = htons(port);
rc = bind(sock, &me.sa, sizeof(me.sa6));
}
#endif /* USE_IPV6 */
else
#endif
{
memset(&me.sa4, 0, sizeof(me.sa4));
me.sa4.sin_family = AF_INET;
me.sa4.sin_addr.s_addr = INADDR_ANY;
me.sa4.sin_port = htons(port);
rc = bind(sock, &me.sa, sizeof(me.sa4));
}
if(rc) {
sockerr = SOCKERRNO;
logmsg("Error binding socket on port %hu (%d) %s", port,
@ -929,13 +924,12 @@ static int test_dnsd(int argc, const char **argv)
srvr_sockaddr_union_t localaddr;
memset(&localaddr, 0, sizeof(localaddr));
#ifdef USE_IPV6
if(!use_ipv6)
if(socket_domain == AF_INET6)
la_size = sizeof(localaddr.sa6);
else
#endif
la_size = sizeof(localaddr.sa4);
#ifdef USE_IPV6
else
la_size = sizeof(localaddr.sa6);
#endif
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
sockerr = SOCKERRNO;
logmsg("getsockname() failed with error (%d) %s",
@ -980,7 +974,7 @@ static int test_dnsd(int argc, const char **argv)
}
}
logmsg("Running %s version on port UDP/%d", ipv_inuse, (int)port);
logmsg("Running %s version on port UDP/%d", socket_type, (int)port);
curlx_nonblock(sock, TRUE);
for(;;) {
@ -994,13 +988,11 @@ static int test_dnsd(int argc, const char **argv)
timediff_t timeout_ms = 0;
fromlen = sizeof(from);
#ifdef USE_IPV6
if(!use_ipv6)
if(socket_domain == AF_INET6)
fromlen = sizeof(from.sa6);
else
#endif
fromlen = sizeof(from.sa4);
#ifdef USE_IPV6
else
fromlen = sizeof(from.sa6);
#endif
timeout_ms = send_resp_queue(sock);
@ -1089,7 +1081,7 @@ dnsd_cleanup:
if(got_exit_signal) {
logmsg("========> %s dnsd (port: %d pid: %ld) exits with signal (%d)",
ipv_inuse, (int)port, (long)our_getpid(), exit_signal);
socket_type, (int)port, (long)our_getpid(), exit_signal);
/*
* To properly set the return status of the process we
* must raise the same signal SIGINT or SIGTERM that we

View file

@ -168,10 +168,6 @@ static int serverlogslocked;
static const char *configfile = NULL;
static const char *logdir = "log";
static char loglockfile[256];
#ifdef USE_IPV6
static bool use_ipv6 = FALSE;
#endif
static const char *ipv_inuse = "IPv4";
static unsigned short server_port = 0;
static const char *socket_type = "IPv4";
static int socket_domain = AF_INET;

View file

@ -814,17 +814,14 @@ static int test_mqttd(int argc, const char *argv[])
}
else if(!strcmp("--ipv6", argv[arg])) {
#ifdef USE_IPV6
socket_type = "IPv6";
socket_domain = AF_INET6;
ipv_inuse = "IPv6";
#endif
arg++;
}
else if(!strcmp("--ipv4", argv[arg])) {
/* for completeness, we support this option as well */
#ifdef USE_IPV6
socket_type = "IPv4";
socket_domain = AF_INET;
ipv_inuse = "IPv4";
#endif
arg++;
}
else if(!strcmp("--port", argv[arg])) {
@ -855,7 +852,7 @@ static int test_mqttd(int argc, const char *argv[])
}
snprintf(loglockfile, sizeof(loglockfile), "%s/%s/mqtt-%s.lock",
logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
logdir, SERVERLOGS_LOCKDIR, socket_type);
CURL_BINMODE(stdin);
CURL_BINMODE(stdout);
@ -881,7 +878,7 @@ static int test_mqttd(int argc, const char *argv[])
msgsock = CURL_SOCKET_BAD; /* no stream socket yet */
}
logmsg("Running %s version", ipv_inuse);
logmsg("Running %s version", socket_type);
logmsg("Listening on port %hu", server_port);
wrotepidfile = write_pidfile(pidname);

View file

@ -52,8 +52,8 @@ static int test_resolve(int argc, const char *argv[])
}
else if(!strcmp("--ipv6", argv[arg])) {
#ifdef CURLRES_IPV6
ipv_inuse = "IPv6";
use_ipv6 = TRUE;
socket_type = "IPv6";
socket_domain = AF_INET6;
arg++;
#else
puts("IPv6 support has been disabled in this program");
@ -61,11 +61,8 @@ static int test_resolve(int argc, const char *argv[])
#endif
}
else if(!strcmp("--ipv4", argv[arg])) {
/* for completeness, we support this option as well */
ipv_inuse = "IPv4";
#ifdef CURLRES_IPV6
use_ipv6 = FALSE;
#endif
socket_type = "IPv4";
socket_domain = AF_INET;
arg++;
}
else {
@ -84,7 +81,7 @@ static int test_resolve(int argc, const char *argv[])
}
#ifdef CURLRES_IPV6
if(use_ipv6) {
if(socket_domain == AF_INET6) {
/* Check that the system has IPv6 enabled before checking the resolver */
curl_socket_t s = socket(PF_INET6, SOCK_DGRAM, 0);
if(s == CURL_SOCKET_BAD)
@ -101,7 +98,7 @@ static int test_resolve(int argc, const char *argv[])
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = use_ipv6 ? PF_INET6 : PF_INET;
hints.ai_family = socket_domain;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = 0;
rc = getaddrinfo(host, "80", &hints, &ai);
@ -123,7 +120,7 @@ static int test_resolve(int argc, const char *argv[])
#endif
if(rc)
printf("Resolving %s '%s' did not work\n", ipv_inuse, host);
printf("Resolving %s '%s' did not work\n", socket_type, host);
return !!rc;
}

View file

@ -1000,16 +1000,14 @@ static int test_rtspd(int argc, const char *argv[])
logdir = argv[arg++];
}
else if(!strcmp("--ipv4", argv[arg])) {
#ifdef USE_IPV6
ipv_inuse = "IPv4";
use_ipv6 = FALSE;
#endif
socket_type = "IPv4";
socket_domain = AF_INET;
arg++;
}
else if(!strcmp("--ipv6", argv[arg])) {
#ifdef USE_IPV6
ipv_inuse = "IPv6";
use_ipv6 = TRUE;
socket_type = "IPv6";
socket_domain = AF_INET6;
#endif
arg++;
}
@ -1045,18 +1043,16 @@ static int test_rtspd(int argc, const char *argv[])
}
snprintf(loglockfile, sizeof(loglockfile), "%s/%s/rtsp-%s.lock",
logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
logdir, SERVERLOGS_LOCKDIR, socket_type);
install_signal_handlers(FALSE);
#ifdef USE_IPV6
if(!use_ipv6)
if(socket_domain == AF_INET6)
sock = socket(AF_INET6, SOCK_STREAM, 0);
else
#endif
sock = socket(AF_INET, SOCK_STREAM, 0);
#ifdef USE_IPV6
else
sock = socket(AF_INET6, SOCK_STREAM, 0);
#endif
if(sock == CURL_SOCKET_BAD) {
sockerr = SOCKERRNO;
@ -1074,23 +1070,22 @@ static int test_rtspd(int argc, const char *argv[])
}
#ifdef USE_IPV6
if(!use_ipv6) {
#endif
memset(&me.sa4, 0, sizeof(me.sa4));
me.sa4.sin_family = AF_INET;
me.sa4.sin_addr.s_addr = INADDR_ANY;
me.sa4.sin_port = htons(port);
rc = bind(sock, &me.sa, sizeof(me.sa4));
#ifdef USE_IPV6
}
else {
if(socket_domain == AF_INET6) {
memset(&me.sa6, 0, sizeof(me.sa6));
me.sa6.sin6_family = AF_INET6;
me.sa6.sin6_addr = in6addr_any;
me.sa6.sin6_port = htons(port);
rc = bind(sock, &me.sa, sizeof(me.sa6));
}
#endif /* USE_IPV6 */
else
#endif
{
memset(&me.sa4, 0, sizeof(me.sa4));
me.sa4.sin_family = AF_INET;
me.sa4.sin_addr.s_addr = INADDR_ANY;
me.sa4.sin_port = htons(port);
rc = bind(sock, &me.sa, sizeof(me.sa4));
}
if(rc) {
sockerr = SOCKERRNO;
logmsg("Error binding socket on port %hu (%d) %s", port,
@ -1105,13 +1100,11 @@ static int test_rtspd(int argc, const char *argv[])
srvr_sockaddr_union_t localaddr;
memset(&localaddr, 0, sizeof(localaddr));
#ifdef USE_IPV6
if(!use_ipv6)
if(socket_domain == AF_INET6)
la_size = sizeof(localaddr.sa6);
else
#endif
la_size = sizeof(localaddr.sa4);
#ifdef USE_IPV6
else
la_size = sizeof(localaddr.sa6);
#endif
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
sockerr = SOCKERRNO;
logmsg("getsockname() failed with error (%d) %s",
@ -1141,7 +1134,7 @@ static int test_rtspd(int argc, const char *argv[])
goto server_cleanup;
}
}
logmsg("Running %s version on port %d", ipv_inuse, (int)port);
logmsg("Running %s version on port %d", socket_type, (int)port);
/* start accepting connections */
if(listen(sock, 5)) {
@ -1287,7 +1280,7 @@ server_cleanup:
if(got_exit_signal) {
logmsg("========> %s rtspd (port: %d pid: %ld) exits with signal (%d)",
ipv_inuse, (int)port, (long)our_getpid(), exit_signal);
socket_type, (int)port, (long)our_getpid(), exit_signal);
/*
* To properly set the return status of the process we
* must raise the same signal SIGINT or SIGTERM that we

View file

@ -1057,7 +1057,7 @@ static bool juggle(curl_socket_t *sockfdp,
/* Question asking us what PORT number we are listening to.
Replies to PORT with "IPv[num]/[port]" */
snprintf((char *)buffer, sizeof(buffer), "%s/%hu\n",
ipv_inuse, server_port);
socket_type, server_port);
buffer_len = (ssize_t)strlen((const char *)buffer);
snprintf(data, sizeof(data), "PORT\n%04x\n", (unsigned int)buffer_len);
if(!write_stdout(data, 10))
@ -1216,17 +1216,14 @@ static int test_sockfilt(int argc, const char *argv[])
}
else if(!strcmp("--ipv6", argv[arg])) {
#ifdef USE_IPV6
socket_type = "IPv6";
socket_domain = AF_INET6;
ipv_inuse = "IPv6";
#endif
arg++;
}
else if(!strcmp("--ipv4", argv[arg])) {
/* for completeness, we support this option as well */
#ifdef USE_IPV6
socket_type = "IPv4";
socket_domain = AF_INET;
ipv_inuse = "IPv4";
#endif
arg++;
}
else if(!strcmp("--bindonly", argv[arg])) {
@ -1348,7 +1345,7 @@ static int test_sockfilt(int argc, const char *argv[])
msgsock = CURL_SOCKET_BAD; /* no stream socket yet */
}
logmsg("Running %s version", ipv_inuse);
logmsg("Running %s version", socket_type);
if(server_connectport)
logmsg("Connected to port %hu", server_connectport);

View file

@ -793,16 +793,14 @@ static int test_socksd(int argc, const char *argv[])
}
else if(!strcmp("--ipv6", argv[arg])) {
#ifdef USE_IPV6
socket_domain = AF_INET6;
socket_type = "IPv6";
socket_domain = AF_INET6;
#endif
arg++;
}
else if(!strcmp("--ipv4", argv[arg])) {
/* for completeness, we support this option as well */
#ifdef USE_IPV6
socket_type = "IPv4";
#endif
socket_domain = AF_INET;
arg++;
}
else if(!strcmp("--unix-socket", argv[arg])) {
@ -817,8 +815,8 @@ static int test_socksd(int argc, const char *argv[])
(unsigned int)sizeof(sau.sun_path), unix_socket);
return 0;
}
socket_domain = AF_UNIX;
socket_type = "unix";
socket_domain = AF_UNIX;
#endif
arg++;
}

View file

@ -2167,13 +2167,11 @@ static int test_sws(int argc, const char *argv[])
srvr_sockaddr_union_t localaddr;
memset(&localaddr, 0, sizeof(localaddr));
#ifdef USE_IPV6
if(socket_domain != AF_INET6)
if(socket_domain == AF_INET6)
la_size = sizeof(localaddr.sa6);
else
#endif
la_size = sizeof(localaddr.sa4);
#ifdef USE_IPV6
else
la_size = sizeof(localaddr.sa6);
#endif
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
sockerr = SOCKERRNO;
logmsg("getsockname() failed with error (%d) %s",

View file

@ -516,13 +516,11 @@ static int synchnet(curl_socket_t f /* socket to flush */)
if(i) {
j++;
#ifdef USE_IPV6
if(!use_ipv6)
if(socket_domain == AF_INET6)
fromaddrlen = sizeof(fromaddr.sa6);
else
#endif
fromaddrlen = sizeof(fromaddr.sa4);
#ifdef USE_IPV6
else
fromaddrlen = sizeof(fromaddr.sa6);
#endif
(void)recvfrom(f, rbuf, sizeof(rbuf), 0, &fromaddr.sa, &fromaddrlen);
}
else
@ -1062,16 +1060,14 @@ static int test_tftpd(int argc, const char **argv)
logdir = argv[arg++];
}
else if(!strcmp("--ipv4", argv[arg])) {
#ifdef USE_IPV6
ipv_inuse = "IPv4";
use_ipv6 = FALSE;
#endif
socket_type = "IPv4";
socket_domain = AF_INET;
arg++;
}
else if(!strcmp("--ipv6", argv[arg])) {
#ifdef USE_IPV6
ipv_inuse = "IPv6";
use_ipv6 = TRUE;
socket_type = "IPv6";
socket_domain = AF_INET6;
#endif
arg++;
}
@ -1107,18 +1103,16 @@ static int test_tftpd(int argc, const char **argv)
}
snprintf(loglockfile, sizeof(loglockfile), "%s/%s/tftp-%s.lock",
logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
logdir, SERVERLOGS_LOCKDIR, socket_type);
install_signal_handlers(TRUE);
#ifdef USE_IPV6
if(!use_ipv6)
if(socket_domain == AF_INET6)
sock = socket(AF_INET6, SOCK_DGRAM, 0);
else
#endif
sock = socket(AF_INET, SOCK_DGRAM, 0);
#ifdef USE_IPV6
else
sock = socket(AF_INET6, SOCK_DGRAM, 0);
#endif
if(sock == CURL_SOCKET_BAD) {
sockerr = SOCKERRNO;
@ -1138,23 +1132,22 @@ static int test_tftpd(int argc, const char **argv)
}
#ifdef USE_IPV6
if(!use_ipv6) {
#endif
memset(&me.sa4, 0, sizeof(me.sa4));
me.sa4.sin_family = AF_INET;
me.sa4.sin_addr.s_addr = INADDR_ANY;
me.sa4.sin_port = htons(port);
rc = bind(sock, &me.sa, sizeof(me.sa4));
#ifdef USE_IPV6
}
else {
if(socket_domain == AF_INET6) {
memset(&me.sa6, 0, sizeof(me.sa6));
me.sa6.sin6_family = AF_INET6;
me.sa6.sin6_addr = in6addr_any;
me.sa6.sin6_port = htons(port);
rc = bind(sock, &me.sa, sizeof(me.sa6));
}
#endif /* USE_IPV6 */
else
#endif
{
memset(&me.sa4, 0, sizeof(me.sa4));
me.sa4.sin_family = AF_INET;
me.sa4.sin_addr.s_addr = INADDR_ANY;
me.sa4.sin_port = htons(port);
rc = bind(sock, &me.sa, sizeof(me.sa4));
}
if(rc) {
sockerr = SOCKERRNO;
logmsg("Error binding socket on port %hu (%d) %s", port,
@ -1170,13 +1163,11 @@ static int test_tftpd(int argc, const char **argv)
srvr_sockaddr_union_t localaddr;
memset(&localaddr, 0, sizeof(localaddr));
#ifdef USE_IPV6
if(!use_ipv6)
if(socket_domain == AF_INET6)
la_size = sizeof(localaddr.sa6);
else
#endif
la_size = sizeof(localaddr.sa4);
#ifdef USE_IPV6
else
la_size = sizeof(localaddr.sa6);
#endif
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
sockerr = SOCKERRNO;
logmsg("getsockname() failed with error (%d) %s",
@ -1221,18 +1212,16 @@ static int test_tftpd(int argc, const char **argv)
}
}
logmsg("Running %s version on port UDP/%d", ipv_inuse, (int)port);
logmsg("Running %s version on port UDP/%d", socket_type, (int)port);
for(;;) {
fromlen = sizeof(from);
#ifdef USE_IPV6
if(!use_ipv6)
if(socket_domain == AF_INET6)
fromlen = sizeof(from.sa6);
else
#endif
fromlen = sizeof(from.sa4);
#ifdef USE_IPV6
else
fromlen = sizeof(from.sa6);
#endif
n = (ssize_t)recvfrom(sock, &trsbuf.storage[0], sizeof(trsbuf.storage), 0,
&from.sa, &fromlen);
if(got_exit_signal)
@ -1247,23 +1236,7 @@ static int test_tftpd(int argc, const char **argv)
serverlogslocked = 1;
#ifdef USE_IPV6
if(!use_ipv6) {
#endif
from.sa4.sin_family = AF_INET;
peer = socket(AF_INET, SOCK_DGRAM, 0);
if(peer == CURL_SOCKET_BAD) {
logmsg("socket");
result = 2;
break;
}
if(connect(peer, &from.sa, sizeof(from.sa4)) < 0) {
logmsg("connect: fail");
result = 1;
break;
}
#ifdef USE_IPV6
}
else {
if(socket_domain == AF_INET6) {
from.sa6.sin6_family = AF_INET6;
peer = socket(AF_INET6, SOCK_DGRAM, 0);
if(peer == CURL_SOCKET_BAD) {
@ -1277,7 +1250,22 @@ static int test_tftpd(int argc, const char **argv)
break;
}
}
else
#endif
{
from.sa4.sin_family = AF_INET;
peer = socket(AF_INET, SOCK_DGRAM, 0);
if(peer == CURL_SOCKET_BAD) {
logmsg("socket");
result = 2;
break;
}
if(connect(peer, &from.sa, sizeof(from.sa4)) < 0) {
logmsg("connect: fail");
result = 1;
break;
}
}
maxtimeout = 5 * TIMEOUT;
@ -1331,7 +1319,7 @@ tftpd_cleanup:
if(got_exit_signal) {
logmsg("========> %s tftpd (port: %d pid: %ld) exits with signal (%d)",
ipv_inuse, (int)port, (long)our_getpid(), exit_signal);
socket_type, (int)port, (long)our_getpid(), exit_signal);
/*
* To properly set the return status of the process we
* must raise the same signal SIGINT or SIGTERM that we