1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-31 20:09:02 +00:00

Fix UDP listen on Windows: recvfrom behaves differently.

This commit is contained in:
dmiller
2024-11-07 23:43:26 +00:00
parent 1e8c1ab3cd
commit bfba1352e4

View File

@@ -450,8 +450,24 @@ static void handle_connection(int socket_accept, int type, fd_set *listen_fds)
int nbytes = recvfrom(socket_accept, buf, sizeof(buf), MSG_PEEK,
&s.remoteaddr.sockaddr, &s.ss_len);
if (nbytes < 0) {
loguser("%s.\n", socket_strerror(socket_errno()));
return;
int err = socket_errno();
switch (err) {
// Recoverable try-again errors:
case EINTR:
case EAGAIN:
loguser("%s.\n", socket_strerror(socket_errno()));
return;
// Ignorable errors:
// Windows returns SOCKET_ERROR and WSAEMSGSIZE instead of truncating!
case EMSGSIZE:
if (s.remoteaddr.sockaddr.sa_family != AF_UNSPEC)
break;
// everything else:
default:
die("recvfrom");
return;
break;
}
}
/*
* We're using connected udp. This has the down side of only