diff options
author | Max Romanov <max.romanov@nginx.com> | 2019-03-05 15:38:49 +0300 |
---|---|---|
committer | Max Romanov <max.romanov@nginx.com> | 2019-03-05 15:38:49 +0300 |
commit | 0ab83370cb8e70a4440589051f14d99ae8cec588 (patch) | |
tree | df2039e1764cf49e9571ee0dd2109bd2db897cfb | |
parent | aedb999fe19d47ca0faf91752d7be4b227c51021 (diff) | |
download | unit-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.h | 1 | ||||
-rw-r--r-- | src/nxt_socketpair.c | 13 |
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; } } |