38 lines
1.3 KiB
Diff
38 lines
1.3 KiB
Diff
commit b84b48c61368544d14324d6173d3918d24df9837
|
|
Author: Christine Caulfield <ccaulfie@redhat.com>
|
|
Date: Wed Jan 29 15:52:26 2020 +0000
|
|
|
|
[udp] Better fix for -ENETUNREACH
|
|
|
|
This fix for the ENETUNREACH problem works better than the last one
|
|
in that it also works with Linux kernels > 5.0.0 (which return
|
|
-ENETUNREACH) if an interfaces is brought down, and also on FreeBSD
|
|
which returns ENETDOWN.
|
|
|
|
|
|
--- a/libknet/transport_udp.c 2020-08-12 10:57:52.480344141 +0100
|
|
+++ b/libknet/transport_udp.c 2020-08-12 10:47:43.168435711 +0100
|
|
@@ -395,14 +395,20 @@
|
|
read_errs_from_sock(knet_h, sockfd);
|
|
return 0;
|
|
}
|
|
- if (recv_errno == EINVAL || recv_errno == EPERM) {
|
|
+ if ((recv_errno == EINVAL) || (recv_errno == EPERM) ||
|
|
+ (recv_errno == ENETUNREACH) || (recv_errno == ENETDOWN)) {
|
|
+#ifdef DEBUG
|
|
+ if ((recv_errno == ENETUNREACH) || (recv_errno == ENETDOWN)) {
|
|
+ log_debug(knet_h, KNET_SUB_TRANSP_UDP, "Sock: %d is unreachable.", sockfd);
|
|
+ }
|
|
+#endif
|
|
return -1;
|
|
}
|
|
if ((recv_errno == ENOBUFS) || (recv_errno == EAGAIN)) {
|
|
#ifdef DEBUG
|
|
log_debug(knet_h, KNET_SUB_TRANSP_UDP, "Sock: %d is overloaded. Slowing TX down", sockfd);
|
|
#endif
|
|
- usleep(KNET_THREADS_TIMERES / 16);
|
|
+ usleep(KNET_THREADS_TIMERES / 16);
|
|
} else {
|
|
read_errs_from_sock(knet_h, sockfd);
|
|
}
|