Use sockaddr_storage for IPv6 compatibility.

This commit is contained in:
Sam Hocevar 2021-02-14 08:25:27 +01:00
parent 26b0e63bf5
commit c9de417f2e

View File

@ -644,14 +644,13 @@ static void handleAccept(ServerInfo const *srv)
{
int udpBytes = 0;
struct sockaddr addr;
struct sockaddr_storage addr;
SOCKLEN_T addrlen = sizeof(addr);
SOCKET nfd;
if (srv->fromAddrInfo->ai_protocol == IPPROTO_TCP) {
/* In TCP mode, get remote address using accept(). */
// FIXME IPv6: need to reuse addrlen from the bind() call
nfd = accept(srv->fd, &addr, &addrlen);
nfd = accept(srv->fd, (struct sockaddr *)&addr, &addrlen);
if (nfd == INVALID_SOCKET) {
syslog(LOG_ERR, "accept(%llu): %m\n", (long long unsigned int)srv->fd);
logEvent(NULL, srv, logAcceptFailed);
@ -666,7 +665,7 @@ static void handleAccept(ServerInfo const *srv)
may be lost later. */
nfd = srv->fd;
SSIZE_T ret = recvfrom(nfd, globalUdpBuffer,
sizeof(globalUdpBuffer), 0, &addr, &addrlen);
sizeof(globalUdpBuffer), 0, (struct sockaddr *)&addr, &addrlen);
if (ret < 0) {
if (GetLastError() == WSAEWOULDBLOCK) {
return;