From 817d75e25bb61b33f8976279c040ffa17f563639 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 7 Aug 2026 17:22:46 +0200 Subject: [PATCH] tests/server/tftpd: replace duplicate code with `open_udp_sock()` call Follow-up to 7f6a75664f9fb45390193e492ee3361fb795d098 #22506 Closes #22517 --- tests/server/tftpd.c | 96 +------------------------------------------- 1 file changed, 2 insertions(+), 94 deletions(-) diff --git a/tests/server/tftpd.c b/tests/server/tftpd.c index 86d42f6f55..0ca6aca83e 100644 --- a/tests/server/tftpd.c +++ b/tests/server/tftpd.c @@ -1005,15 +1005,10 @@ static int do_tftp(struct testcase *test, struct tftphdr *tp, ssize_t size) static int test_tftpd(int argc, const char **argv) { - srvr_sockaddr_union_t me; struct tftphdr *tp; ssize_t n = 0; int arg = 1; curl_socket_t sock = CURL_SOCKET_BAD; - int flag; - int rc; - int sockerr; - char errbuf[STRERROR_LEN]; struct testcase test; int result = 0; srvr_sockaddr_union_t from; @@ -1107,96 +1102,9 @@ static int test_tftpd(int argc, const char **argv) install_signal_handlers(TRUE); -#ifdef USE_IPV6 - if(socket_domain == AF_INET6) - sock = socket(AF_INET6, SOCK_DGRAM, 0); - else -#endif - sock = socket(AF_INET, SOCK_DGRAM, 0); - - if(sock == CURL_SOCKET_BAD) { - sockerr = SOCKERRNO; - logmsg("Error creating socket (%d) %s", - sockerr, curlx_strerror(sockerr, errbuf, sizeof(errbuf))); - result = 1; + result = open_udp_sock(&sock, &server_port); + if(result) goto tftpd_cleanup; - } - - flag = 1; - if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&flag, sizeof(flag))) { - sockerr = SOCKERRNO; - logmsg("setsockopt(SO_REUSEADDR) failed with error (%d) %s", - sockerr, curlx_strerror(sockerr, errbuf, sizeof(errbuf))); - result = 1; - goto tftpd_cleanup; - } - -#ifdef USE_IPV6 - 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(server_port); - rc = bind(sock, &me.sa, sizeof(me.sa6)); - } - 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(server_port); - rc = bind(sock, &me.sa, sizeof(me.sa4)); - } - if(rc) { - sockerr = SOCKERRNO; - logmsg("Error binding socket on port %hu (%d) %s", server_port, - sockerr, curlx_strerror(sockerr, errbuf, sizeof(errbuf))); - result = 1; - goto tftpd_cleanup; - } - - if(!server_port) { - /* The system was supposed to choose a port number, figure out which - port we actually got and update the listener port value with it. */ - curl_socklen_t la_size; - srvr_sockaddr_union_t localaddr; - memset(&localaddr, 0, sizeof(localaddr)); -#ifdef USE_IPV6 - if(socket_domain == AF_INET6) - la_size = sizeof(localaddr.sa6); - else -#endif - la_size = sizeof(localaddr.sa4); - if(getsockname(sock, &localaddr.sa, &la_size) < 0) { - sockerr = SOCKERRNO; - logmsg("getsockname() failed with error (%d) %s", - sockerr, curlx_strerror(sockerr, errbuf, sizeof(errbuf))); - sclose(sock); - goto tftpd_cleanup; - } - switch(localaddr.sa.sa_family) { - case AF_INET: - server_port = ntohs(localaddr.sa4.sin_port); - break; -#ifdef USE_IPV6 - case AF_INET6: - server_port = ntohs(localaddr.sa6.sin6_port); - break; -#endif - default: - break; - } - if(!server_port) { - /* Real failure, listener port shall not be zero beyond this point. */ - logmsg("Apparently getsockname() succeeded, with listener port zero."); - logmsg("A valid reason for this failure is a binary built without"); - logmsg("proper network library linkage. This might not be the only"); - logmsg("reason, but double check it before anything else."); - result = 2; - goto tftpd_cleanup; - } - } tftpd_wrotepidfile = write_pidfile(pidname); if(!tftpd_wrotepidfile) {