]> git.kaiwu.me - nginx.git/commitdiff
handle connect()'s EAGAIN on Linux
authorIgor Sysoev <igor@sysoev.ru>
Wed, 9 Jul 2008 15:42:13 +0000 (15:42 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Wed, 9 Jul 2008 15:42:13 +0000 (15:42 +0000)
src/event/ngx_event_connect.c

index 5ae7b23bfdabe8791cdd44fcfb22fbef86c13711..b5e1a870e5dcf697874fd09ef8ba2b1ef98b3844 100644 (file)
@@ -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