]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Make ENOBUFS a soft error
authorOndřej Surý <ondrej@sury.org>
Mon, 13 Aug 2018 07:35:42 +0000 (09:35 +0200)
committerOndřej Surý <ondrej@sury.org>
Mon, 13 Aug 2018 17:23:21 +0000 (19:23 +0200)
(cherry picked from commit ebf3083e08f844160e3b868234328060f38dda86)

lib/isc/unix/socket.c

index 20d13c765ed6fd47e5dea27408bb158c6b19355a..f844124d74b2d62465f5f3066e8c61505e0bf871 100644 (file)
@@ -256,6 +256,7 @@ typedef enum { poll_idle, poll_active, poll_checking } pollstate_t;
  */
 #define SOFT_ERROR(e)  ((e) == EAGAIN || \
                         (e) == EWOULDBLOCK || \
+                        (e) == ENOBUFS || \
                         (e) == EINTR || \
                         (e) == 0)
 
@@ -1952,7 +1953,7 @@ doio_recv(isc__socket_t *sock, isc_socketevent_t *dev) {
                SOFT_OR_HARD(EHOSTDOWN, ISC_R_HOSTDOWN);
                /* HPUX 11.11 can return EADDRNOTAVAIL. */
                SOFT_OR_HARD(EADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
-               ALWAYS_HARD(ENOBUFS, ISC_R_NORESOURCES);
+               SOFT_OR_HARD(ENOBUFS, ISC_R_NORESOURCES);
                /* Should never get this one but it was seen. */
 #ifdef ENOPROTOOPT
                SOFT_OR_HARD(ENOPROTOOPT, ISC_R_HOSTUNREACH);
@@ -2149,7 +2150,7 @@ doio_send(isc__socket_t *sock, isc_socketevent_t *dev) {
                ALWAYS_HARD(EHOSTDOWN, ISC_R_HOSTUNREACH);
 #endif
                ALWAYS_HARD(ENETUNREACH, ISC_R_NETUNREACH);
-               ALWAYS_HARD(ENOBUFS, ISC_R_NORESOURCES);
+               SOFT_OR_HARD(ENOBUFS, ISC_R_NORESOURCES);
                ALWAYS_HARD(EPERM, ISC_R_HOSTUNREACH);
                ALWAYS_HARD(EPIPE, ISC_R_NOTCONNECTED);
                ALWAYS_HARD(ECONNRESET, ISC_R_CONNECTIONRESET);