aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2008-07-09 15:42:13 +0000
committerIgor Sysoev <igor@sysoev.ru>2008-07-09 15:42:13 +0000
commit58e9f22bfd823e8bcf1b358a9bcecc079c1b9fee (patch)
tree8b9c2d61edd3ad0463d3ed64177817a996ec7eb4 /src
parent82911ceb0c9950b68b527a2341674664d3e40560 (diff)
downloadnginx-58e9f22bfd823e8bcf1b358a9bcecc079c1b9fee.tar.gz
nginx-58e9f22bfd823e8bcf1b358a9bcecc079c1b9fee.zip
handle connect()'s EAGAIN on Linux
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_connect.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index 5ae7b23bf..b5e1a870e 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -139,11 +139,22 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
if (rc == -1) {
err = ngx_socket_errno;
- /* Winsock returns WSAEWOULDBLOCK (NGX_EAGAIN) */
-
- if (err != NGX_EINPROGRESS && err != NGX_EAGAIN) {
+ if (err != NGX_EINPROGRESS
+#if (NGX_WIN32)
+ /* Winsock returns WSAEWOULDBLOCK (NGX_EAGAIN) */
+ && err != NGX_EAGAIN
+#endif
+ )
+ {
if (err == NGX_ECONNREFUSED
+#if (NGX_LINUX)
+ /*
+ * Linux returns EAGAIN instead of ECONNREFUSED
+ * for unix sockets if listen queue is full
+ */
+ || err == NGX_EAGAIN
+#endif
|| err == NGX_ENETDOWN
|| err == NGX_ENETUNREACH
|| err == NGX_EHOSTDOWN