diff src/os/unix/ngx_recv.c @ 218:05592fd7a436

nginx-0.0.1-2004-01-05-23:55:48 import
author Igor Sysoev <igor@sysoev.ru>
date Mon, 05 Jan 2004 20:55:48 +0000
parents 0061d1f0908d
children b6793bc5034b
line wrap: on
line diff
--- a/src/os/unix/ngx_recv.c
+++ b/src/os/unix/ngx_recv.c
@@ -17,8 +17,9 @@ ssize_t ngx_unix_recv(ngx_connection_t *
     rev = c->read;
 
     if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) {
-        ngx_log_debug(c->log, "recv: eof:%d, avail:%d, err:%d" _
-                      rev->kq_eof _ rev->available _ rev->kq_errno);
+        ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                       "recv: eof:%d, avail:%d, err:%d",
+                       rev->kq_eof, rev->available, rev->kq_errno);
 
         if (rev->available == 0) {
             if (rev->kq_eof) {
@@ -28,7 +29,16 @@ ssize_t ngx_unix_recv(ngx_connection_t *
                 if (rev->kq_errno) {
                     rev->error = 1;
                     ngx_set_socket_errno(rev->kq_errno);
-                    return ngx_unix_recv_error(rev, 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)
+                    {
+                        return 0;
+                    }
+
+                    return NGX_ERROR;
                 }
 
                 return 0;
@@ -42,7 +52,7 @@ ssize_t ngx_unix_recv(ngx_connection_t *
     do {
         n = recv(c->fd, buf, size, 0);
 
-        ngx_log_debug(c->log, "recv: %d:%d" _ n _ size);
+        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,"recv: %d:%d", n, size);
 
         if (n >= 0) {
             if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) {
@@ -104,7 +114,7 @@ ssize_t ngx_unix_recv(ngx_connection_t *
     do {
         n = recv(c->fd, buf, size, 0);
 
-        ngx_log_debug(c->log, "recv: %d:%d" _ n _ size);
+        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,"recv: %d:%d", n, size);
 
         if (n >= 0) {
             if ((size_t) n < size) {
@@ -138,21 +148,33 @@ ssize_t ngx_unix_recv(ngx_connection_t *
 
 static int ngx_unix_recv_error(ngx_event_t *rev, ngx_err_t err)
 {
-    if (err == NGX_ECONNRESET && rev->ignore_econnreset) {
-        return 0;
-    }
+    ngx_int_t  level;
 
-    if (err == NGX_EAGAIN) {
-        ngx_log_error(NGX_LOG_INFO, rev->log, err, "recv() returned EAGAIN");
+    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_EINTR) {
-        ngx_log_error(NGX_LOG_INFO, rev->log, err, "recv() returned EINTR");
-        return NGX_EINTR;
+    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(NGX_LOG_ERR, rev->log, err, "recv() failed");
+    ngx_log_error(level, rev->log, err, "recv() failed");
 
     return NGX_ERROR;
 }