1
0
mirror of https://github.com/moparisthebest/curl synced 2025-01-11 05:58:01 -05:00

connect: on linux, enable reporting of all ICMP errors on UDP sockets

The linux kernel does not report all ICMP errors back to userspace due
to historical reasons.

IP*_RECVERR sockopt must be turned on to have the correct behaviour
which is to pass all ICMP errors to userspace.

See https://bugzilla.kernel.org/show_bug.cgi?id=202355

Closes #6341
This commit is contained in:
Cristian Rodríguez 2020-12-17 11:27:03 -03:00 committed by Daniel Stenberg
parent a7696c7343
commit d13179db3e
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -1574,6 +1574,20 @@ CURLcode Curl_socket(struct connectdata *conn,
} }
#endif #endif
#if defined(__linux__) && defined(IP_RECVERR)
if(addr->socktype == SOCK_DGRAM) {
int one = 1;
switch(addr->family) {
case AF_INET:
setsockopt(*sockfd, SOL_IP, IP_RECVERR, &one, sizeof(one));
break;
case AF_INET6:
setsockopt(*sockfd, SOL_IPV6, IPV6_RECVERR, &one, sizeof(one));
break;
}
}
#endif
return CURLE_OK; return CURLE_OK;
} }