One Level Up
  Top Level
 
  src/os/unix/ngx_udp_recv.c - nginx-1.7.10
 Functions defined
 
 Source code
  
 
 
 
- #include <ngx_config.h>
 
- #include <ngx_core.h>
 
- #include <ngx_event.h>
 
 
 
- #if (NGX_HAVE_KQUEUE)
 
 
- ssize_t
 
- ngx_udp_unix_recv(ngx_connection_t *c, u_char *buf, size_t size)
 
- {
 
-     ssize_t       n;
 
-     ngx_err_t     err;
 
-     ngx_event_t  *rev;
 
 
-     rev = c->read;
 
 
-     do {
 
-         n = recv(c->fd, buf, size, 0);
 
 
-         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_USE_KQUEUE_EVENT) {
 
-                 rev->available -= n;
 
 
-                 
 
-                 if (rev->available <= 0) {
 
-                     rev->ready = 0;
 
-                     rev->available = 0;
 
-                 }
 
-             }
 
 
-             return n;
 
-         }
 
 
-         err = ngx_socket_errno;
 
 
-         if (err == NGX_EAGAIN || err == NGX_EINTR) {
 
-             ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
 
-                            "recv() not ready");
 
-             n = NGX_AGAIN;
 
 
-         } else {
 
-             n = ngx_connection_error(c, err, "recv() failed");
 
-             break;
 
-         }
 
 
-     } while (err == NGX_EINTR);
 
 
-     rev->ready = 0;
 
 
-     if (n == NGX_ERROR) {
 
-         rev->error = 1;
 
-     }
 
 
-     return n;
 
- }
 
 
- #else 
 
- ssize_t
 
- ngx_udp_unix_recv(ngx_connection_t *c, u_char *buf, size_t size)
 
- {
 
-     ssize_t       n;
 
-     ngx_err_t     err;
 
-     ngx_event_t  *rev;
 
 
-     rev = c->read;
 
 
-     do {
 
-         n = recv(c->fd, buf, size, 0);
 
 
-         ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
 
-                        "recv: fd:%d %d of %d", c->fd, n, size);
 
 
-         if (n >= 0) {
 
-             return n;
 
-         }
 
 
-         err = ngx_socket_errno;
 
 
-         if (err == NGX_EAGAIN || err == NGX_EINTR) {
 
-             ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
 
-                            "recv() not ready");
 
-             n = NGX_AGAIN;
 
 
-         } else {
 
-             n = ngx_connection_error(c, err, "recv() failed");
 
-             break;
 
-         }
 
 
-     } while (err == NGX_EINTR);
 
 
-     rev->ready = 0;
 
 
-     if (n == NGX_ERROR) {
 
-         rev->error = 1;
 
-     }
 
 
-     return n;
 
- }
 
 
- #endif 
  One Level Up
  Top Level