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:
Родитель
a7696c7343
Коммит
d13179db3e
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче