From: Cristian Rodríguez Date: Thu, 17 Dec 2020 14:27:03 +0000 (-0300) Subject: connect: on linux, enable reporting of all ICMP errors on UDP sockets X-Git-Tag: curl-7_75_0~201 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d13179d;p=thirdparty%2Fcurl.git 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 --- diff --git a/lib/connect.c b/lib/connect.c index 251145ce18..f7aa260199 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -1574,6 +1574,20 @@ CURLcode Curl_socket(struct connectdata *conn, } #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; }