diff src/os/unix/ngx_recv.c @ 253:b6793bc5034b

nginx-0.0.2-2004-02-09-10:46:43 import
author Igor Sysoev <igor@sysoev.ru>
date Mon, 09 Feb 2004 07:46:43 +0000
parents 05592fd7a436
children 8e39cab6abd5
line wrap: on
line diff
--- a/src/os/unix/ngx_recv.c
+++ b/src/os/unix/ngx_recv.c
@@ -4,14 +4,12 @@
 #include <ngx_event.h>
 
 
-static int ngx_unix_recv_error(ngx_event_t *rev, ngx_err_t err);
-
-
 #if (HAVE_KQUEUE)
 
 ssize_t ngx_unix_recv(ngx_connection_t *c, char *buf, size_t size)
 {
     ssize_t       n;
+    ngx_err_t     err;
     ngx_event_t  *rev;
 
     rev = c->read;
@@ -26,11 +24,12 @@ ssize_t ngx_unix_recv(ngx_connection_t *
                 rev->ready = 0;
                 rev->eof = 1;
 
+                ngx_log_error(NGX_LOG_INFO, c->log, rev->kq_errno,
+                              "kevent() reported about an closed connection");
+
                 if (rev->kq_errno) {
                     rev->error = 1;
                     ngx_set_socket_errno(rev->kq_errno);
-                    ngx_log_error(NGX_LOG_INFO, c->log, rev->kq_errno,
-                                  "kevent() reported about closed connection");
 
                     if (rev->kq_errno == NGX_ECONNRESET
                         && rev->log_error == NGX_ERROR_IGNORE_ECONNRESET)
@@ -52,7 +51,8 @@ ssize_t ngx_unix_recv(ngx_connection_t *
     do {
         n = recv(c->fd, buf, size, 0);
 
-        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,"recv: %d:%d", n, size);
+        ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                       "recv: fd:%d %d of %d", c->fd, n, size);
 
         if (n >= 0) {
             if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) {
@@ -87,11 +87,19 @@ ssize_t ngx_unix_recv(ngx_connection_t *
             return n;
         }
 
-        n = ngx_unix_recv_error(rev, ngx_socket_errno);
+        err = ngx_socket_errno;
+
+        if (err == NGX_EAGAIN || err == NGX_EINTR) {
+            ngx_log_debug0(NGX_LOG_DEBUG_EVENT, rev->log, err,
+                           "recv() not ready");
+            n = NGX_AGAIN;
 
-    } while (n == NGX_EINTR);
+        } else {
+            n = ngx_connection_error(c, err, "recv() failed");
+            break;
+        }
 
-    /* NGX_ERROR || NGX_AGAIN */
+    } while (err == NGX_EINTR);
 
     rev->ready = 0;
 
@@ -107,6 +115,7 @@ ssize_t ngx_unix_recv(ngx_connection_t *
 ssize_t ngx_unix_recv(ngx_connection_t *c, char *buf, size_t size)
 {
     ssize_t       n;
+    ngx_err_t     err;
     ngx_event_t  *rev;
 
     rev = c->read;
@@ -114,7 +123,8 @@ ssize_t ngx_unix_recv(ngx_connection_t *
     do {
         n = recv(c->fd, buf, size, 0);
 
-        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,"recv: %d:%d", n, size);
+        ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                       "recv: fd:%d %d of %d", c->fd, n, size);
 
         if (n >= 0) {
             if ((size_t) n < size) {
@@ -128,11 +138,19 @@ ssize_t ngx_unix_recv(ngx_connection_t *
             return n;
         }
 
-        n = ngx_unix_recv_error(rev, ngx_socket_errno);
+        err = ngx_socket_errno;
+
+        if (err == NGX_EAGAIN || err == NGX_EINTR) {
+            ngx_log_debug0(NGX_LOG_DEBUG_EVENT, rev->log, err,
+                           "recv() not ready");
+            n = NGX_AGAIN;
 
-    } while (n == NGX_EINTR);
+        } else {
+            n = ngx_connection_error(c, err, "recv() failed");
+            break;
+        }
 
-    /* NGX_ERROR || NGX_AGAIN */
+    } while (err == NGX_EINTR);
 
     rev->ready = 0;
 
@@ -144,37 +162,3 @@ ssize_t ngx_unix_recv(ngx_connection_t *
 }
 
 #endif /* NAVE_KQUEUE */
-
-
-static int ngx_unix_recv_error(ngx_event_t *rev, ngx_err_t err)
-{
-    ngx_int_t  level;
-
-    if (err == NGX_EAGAIN || err == NGX_EINTR) {
-        ngx_log_debug0(NGX_LOG_DEBUG_EVENT, rev->log, err, "recv() not ready");
-        return NGX_AGAIN;
-    }
-
-    if (err == NGX_ECONNRESET) {
-
-        switch (rev->log_error) {
-        case NGX_ERROR_IGNORE_ECONNRESET:
-            return 0;
-        case NGX_ERROR_INFO:
-            level = NGX_LOG_INFO;
-            break;
-        case NGX_ERROR_ERR:
-            level = NGX_LOG_ERR;
-            break;
-        default:
-            level = NGX_LOG_CRIT;
-        }
-
-    } else {
-        level = NGX_LOG_CRIT;
-    }
-
-    ngx_log_error(level, rev->log, err, "recv() failed");
-
-    return NGX_ERROR;
-}