summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMax Romanov <max.romanov@nginx.com>2019-03-05 15:38:49 +0300
committerMax Romanov <max.romanov@nginx.com>2019-03-05 15:38:49 +0300
commit0ab83370cb8e70a4440589051f14d99ae8cec588 (patch)
treedf2039e1764cf49e9571ee0dd2109bd2db897cfb
parentaedb999fe19d47ca0faf91752d7be4b227c51021 (diff)
downloadunit-0ab83370cb8e70a4440589051f14d99ae8cec588.tar.gz
unit-0ab83370cb8e70a4440589051f14d99ae8cec588.tar.bz2
Handling ENOBUFS error same was as EAGAIN.
Unlike EAGAIN, ENOBUFS returned on OSX when trying to send many relatively small (64 bytes) fragments. Found during investigation of #167 issue on GitHub.
Diffstat (limited to '')
-rw-r--r--src/nxt_errno.h1
-rw-r--r--src/nxt_socketpair.c13
2 files changed, 12 insertions, 2 deletions
diff --git a/src/nxt_errno.h b/src/nxt_errno.h
index b3d7105a..e3ce8349 100644
--- a/src/nxt_errno.h
+++ b/src/nxt_errno.h
@@ -45,6 +45,7 @@ typedef int nxt_err_t;
#define NXT_EILSEQ EILSEQ
#define NXT_ETIME ETIME
#define NXT_ENOMOREFILES 0
+#define NXT_ENOBUFS ENOBUFS
#if (NXT_HPUX)
/* HP-UX uses EWOULDBLOCK instead of EAGAIN. */
diff --git a/src/nxt_socketpair.c b/src/nxt_socketpair.c
index a7396b31..0adbe1f6 100644
--- a/src/nxt_socketpair.c
+++ b/src/nxt_socketpair.c
@@ -94,9 +94,14 @@ nxt_socketpair_send(nxt_fd_event_t *ev, nxt_fd_t fd, nxt_iobuf_t *iob,
case NXT_EAGAIN:
nxt_debug(ev->task, "sendmsg(%d) not ready", ev->fd);
- ev->write_ready = 0;
+ break;
- return NXT_AGAIN;
+ /*
+ * Returned (at least on OSX) when trying to send many small messages.
+ */
+ case NXT_ENOBUFS:
+ nxt_debug(ev->task, "sendmsg(%d) no buffers", ev->fd);
+ break;
case NXT_EINTR:
nxt_debug(ev->task, "sendmsg(%d) interrupted", ev->fd);
@@ -108,6 +113,10 @@ nxt_socketpair_send(nxt_fd_event_t *ev, nxt_fd_t fd, nxt_iobuf_t *iob,
return NXT_ERROR;
}
+
+ ev->write_ready = 0;
+
+ return NXT_AGAIN;
}
}