Mercurial > hg > nginx-quic
comparison src/os/unix/ngx_udp_recv.c @ 6505:5ad379eab6fa
Merged implementations of ngx_udp_unix_recv().
There's no real need in two separate implementations,
with and without kqueue support.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Fri, 08 Apr 2016 16:38:42 +0300 |
parents | f01ab2dbcfdc |
children |
comparison
equal
deleted
inserted
replaced
6504:293413010217 | 6505:5ad379eab6fa |
---|---|
7 | 7 |
8 #include <ngx_config.h> | 8 #include <ngx_config.h> |
9 #include <ngx_core.h> | 9 #include <ngx_core.h> |
10 #include <ngx_event.h> | 10 #include <ngx_event.h> |
11 | 11 |
12 | |
13 #if (NGX_HAVE_KQUEUE) | |
14 | 12 |
15 ssize_t | 13 ssize_t |
16 ngx_udp_unix_recv(ngx_connection_t *c, u_char *buf, size_t size) | 14 ngx_udp_unix_recv(ngx_connection_t *c, u_char *buf, size_t size) |
17 { | 15 { |
18 ssize_t n; | 16 ssize_t n; |
26 | 24 |
27 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, | 25 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, |
28 "recv: fd:%d %z of %uz", c->fd, n, size); | 26 "recv: fd:%d %z of %uz", c->fd, n, size); |
29 | 27 |
30 if (n >= 0) { | 28 if (n >= 0) { |
29 | |
30 #if (NGX_HAVE_KQUEUE) | |
31 | |
31 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { | 32 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { |
32 rev->available -= n; | 33 rev->available -= n; |
33 | 34 |
34 /* | 35 /* |
35 * rev->available may be negative here because some additional | 36 * rev->available may be negative here because some additional |
39 if (rev->available <= 0) { | 40 if (rev->available <= 0) { |
40 rev->ready = 0; | 41 rev->ready = 0; |
41 rev->available = 0; | 42 rev->available = 0; |
42 } | 43 } |
43 } | 44 } |
45 | |
46 #endif | |
44 | 47 |
45 return n; | 48 return n; |
46 } | 49 } |
47 | 50 |
48 err = ngx_socket_errno; | 51 err = ngx_socket_errno; |
65 rev->error = 1; | 68 rev->error = 1; |
66 } | 69 } |
67 | 70 |
68 return n; | 71 return n; |
69 } | 72 } |
70 | |
71 #else /* ! NGX_HAVE_KQUEUE */ | |
72 | |
73 ssize_t | |
74 ngx_udp_unix_recv(ngx_connection_t *c, u_char *buf, size_t size) | |
75 { | |
76 ssize_t n; | |
77 ngx_err_t err; | |
78 ngx_event_t *rev; | |
79 | |
80 rev = c->read; | |
81 | |
82 do { | |
83 n = recv(c->fd, buf, size, 0); | |
84 | |
85 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, | |
86 "recv: fd:%d %z of %uz", c->fd, n, size); | |
87 | |
88 if (n >= 0) { | |
89 return n; | |
90 } | |
91 | |
92 err = ngx_socket_errno; | |
93 | |
94 if (err == NGX_EAGAIN || err == NGX_EINTR) { | |
95 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, | |
96 "recv() not ready"); | |
97 n = NGX_AGAIN; | |
98 | |
99 } else { | |
100 n = ngx_connection_error(c, err, "recv() failed"); | |
101 break; | |
102 } | |
103 | |
104 } while (err == NGX_EINTR); | |
105 | |
106 rev->ready = 0; | |
107 | |
108 if (n == NGX_ERROR) { | |
109 rev->error = 1; | |
110 } | |
111 | |
112 return n; | |
113 } | |
114 | |
115 #endif /* NGX_HAVE_KQUEUE */ |