mirror of
https://github.com/curl/curl.git
synced 2026-08-25 16:33:38 +03:00
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:
parent
133785b159
commit
1637bbc9ce
9 changed files with 116 additions and 160 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue