kronosnet/SOURCES/bz1867708-fix-enetunreach.p...

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);
}