diff src/event/ngx_event_recv.c @ 59:e8cdc2989cee

nginx-0.0.1-2003-02-06-20:21:13 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 06 Feb 2003 17:21:13 +0000
parents b5481d6fbbd4
children 50186b49f2ad
line wrap: on
line diff
--- a/src/event/ngx_event_recv.c
+++ b/src/event/ngx_event_recv.c
@@ -6,7 +6,7 @@
 #include <ngx_recv.h>
 #include <ngx_connection.h>
 
-int ngx_event_recv_core(ngx_connection_t *c, char *buf, size_t size)
+ssize_t ngx_event_recv_core(ngx_connection_t *c, char *buf, size_t size)
 {
     int                n;
     ngx_err_t          err;
@@ -20,9 +20,23 @@ int ngx_event_recv_core(ngx_connection_t
 #if (HAVE_KQUEUE)
     ngx_log_debug(c->log, "ngx_event_recv: eof:%d, avail:%d, err:%d" _
                   c->read->eof _ c->read->available _ c->read->error);
-#if !(USE_KQUEUE)
-    if (ngx_event_type == NGX_KQUEUE_EVENT)
 #endif
+
+#if (USE_KQUEUE)
+
+    if (c->read->eof && c->read->available == 0) {
+        if (c->read->error) {
+            ngx_log_error(NGX_LOG_ERR, c->log, c->read->error,
+                          "recv() failed");
+            return NGX_ERROR;
+        }
+
+        return 0;
+    }
+
+#elif (HAVE_KQUEUE)
+
+    if (ngx_event_type == NGX_KQUEUE_EVENT) {
         if (c->read->eof && c->read->available == 0) {
             if (c->read->error) {
                 ngx_log_error(NGX_LOG_ERR, c->log, c->read->error,
@@ -32,6 +46,8 @@ int ngx_event_recv_core(ngx_connection_t
 
             return 0;
         }
+    }
+
 #endif
 
     n = ngx_recv(c->fd, buf, size, 0);
@@ -48,11 +64,16 @@ int ngx_event_recv_core(ngx_connection_t
         return NGX_ERROR;
     }
 
-#if (HAVE_KQUEUE)
-#if !(USE_KQUEUE)
-    if (ngx_event_type == NGX_KQUEUE_EVENT)
-#endif
+#if (USE_KQUEUE)
+
+    c->read->available -= n;
+
+#elif (HAVE_KQUEUE)
+
+    if (ngx_event_type == NGX_KQUEUE_EVENT) {
         c->read->available -= n;
+    }
+
 #endif
 
     return n;