Groonga 3.0.9 Source Code Document
Main Page
Related Pages
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
groonga
vendor
nginx-1.4.2
src
os
unix
ngx_send.c
Go to the documentation of this file.
1
2
/*
3
* Copyright (C) Igor Sysoev
4
* Copyright (C) Nginx, Inc.
5
*/
6
7
8
#include <
ngx_config.h
>
9
#include <
ngx_core.h
>
10
#include <
ngx_event.h
>
11
12
13
ssize_t
14
ngx_unix_send
(
ngx_connection_t
*c, u_char *buf,
size_t
size)
15
{
16
ssize_t n;
17
ngx_err_t
err;
18
ngx_event_t
*wev;
19
20
wev = c->
write
;
21
22
#if (NGX_HAVE_KQUEUE)
23
24
if
((
ngx_event_flags
&
NGX_USE_KQUEUE_EVENT
) && wev->
pending_eof
) {
25
(void)
ngx_connection_error
(c, wev->kq_errno,
26
"kevent() reported about an closed connection"
);
27
wev->
error
= 1;
28
return
NGX_ERROR
;
29
}
30
31
#endif
32
33
for
( ;; ) {
34
n = send(c->
fd
, buf, size, 0);
35
36
ngx_log_debug3
(
NGX_LOG_DEBUG_EVENT
, c->
log
, 0,
37
"send: fd:%d %d of %d"
, c->
fd
, n, size);
38
39
if
(n > 0) {
40
if
(n < (ssize_t) size) {
41
wev->
ready
= 0;
42
}
43
44
c->
sent
+= n;
45
46
return
n;
47
}
48
49
err =
ngx_socket_errno
;
50
51
if
(n == 0) {
52
ngx_log_error
(
NGX_LOG_ALERT
, c->
log
, err,
"send() returned zero"
);
53
wev->
ready
= 0;
54
return
n;
55
}
56
57
if
(err ==
NGX_EAGAIN
|| err ==
NGX_EINTR
) {
58
wev->
ready
= 0;
59
60
ngx_log_debug0
(
NGX_LOG_DEBUG_EVENT
, c->
log
, err,
61
"send() not ready"
);
62
63
if
(err ==
NGX_EAGAIN
) {
64
return
NGX_AGAIN
;
65
}
66
67
}
else
{
68
wev->
error
= 1;
69
(void)
ngx_connection_error
(c, err,
"send() failed"
);
70
return
NGX_ERROR
;
71
}
72
}
73
}
Generated on Sun Nov 10 2013 09:49:09 for Groonga 3.0.9 Source Code Document by
1.8.1.2