annotate src/os/win32/ngx_wsasend.c @ 4450:4919fb357a5d stable-1.0

Merge of r4406, r4413: copyrights updated.
author Maxim Dounin <mdounin@mdounin.ru>
date Sun, 05 Feb 2012 20:02:59 +0000
parents d43d73277c5c
children 53eb1e67e432
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4450
4919fb357a5d Merge of r4406, r4413: copyrights updated.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2725
diff changeset
4 * Copyright (C) Nginx, Inc.
2725
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 */
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_event.h>
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 ssize_t
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 ngx_wsasend(ngx_connection_t *c, u_char *buf, size_t size)
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 int n;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 u_long sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 ngx_err_t err;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 ngx_event_t *wev;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 WSABUF wsabuf;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22 wev = c->write;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 if (!wev->ready) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 return NGX_AGAIN;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 /*
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 * WSABUF must be 4-byte aligned otherwise
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 * WSASend() will return undocumented WSAEINVAL error.
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 */
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 wsabuf.buf = (char *) buf;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 wsabuf.len = size;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 sent = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 n = WSASend(c->fd, &wsabuf, 1, &sent, 0, NULL, NULL);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 "WSASend: fd:%d, %d, %ul of %uz", c->fd, n, sent, size);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 if (n == 0) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 if (sent < size) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45 wev->ready = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 c->sent += sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 return sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 err = ngx_socket_errno;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 if (err == WSAEWOULDBLOCK) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, "WSASend() not ready");
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 return NGX_AGAIN;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 wev->error = 1;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 ngx_connection_error(c, err, "WSASend() failed");
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 return NGX_ERROR;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 ssize_t
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68 ngx_overlapped_wsasend(ngx_connection_t *c, u_char *buf, size_t size)
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 int n;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 u_long sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 ngx_err_t err;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 ngx_event_t *wev;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 LPWSAOVERLAPPED ovlp;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 WSABUF wsabuf;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 wev = c->write;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79 if (!wev->ready) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 return NGX_AGAIN;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
81 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84 "wev->complete: %d", wev->complete);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86 if (!wev->complete) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88 /* post the overlapped WSASend() */
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90 /*
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 * WSABUFs must be 4-byte aligned otherwise
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 * WSASend() will return undocumented WSAEINVAL error.
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 */
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 wsabuf.buf = (char *) buf;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 wsabuf.len = size;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 sent = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 ovlp = (LPWSAOVERLAPPED) &c->write->ovlp;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 ngx_memzero(ovlp, sizeof(WSAOVERLAPPED));
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 n = WSASend(c->fd, &wsabuf, 1, &sent, 0, ovlp, NULL);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 "WSASend: fd:%d, %d, %ul of %uz", c->fd, n, sent, size);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 wev->complete = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 if (n == 0) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111 if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 /*
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 * if a socket was bound with I/O completion port then
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 * GetQueuedCompletionStatus() would anyway return its status
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 * despite that WSASend() was already complete
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 */
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 wev->active = 1;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 return NGX_AGAIN;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 if (sent < size) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 wev->ready = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127 c->sent += sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 return sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 err = ngx_socket_errno;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 if (err == WSA_IO_PENDING) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136 "WSASend() posted");
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137 wev->active = 1;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
138 return NGX_AGAIN;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
139 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
141 wev->error = 1;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142 ngx_connection_error(c, err, "WSASend() failed");
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144 return NGX_ERROR;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147 /* the overlapped WSASend() complete */
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149 wev->complete = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150 wev->active = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
151
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152 if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154 if (wev->ovlp.error) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
155 ngx_connection_error(c, wev->ovlp.error, "WSASend() failed");
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156 return NGX_ERROR;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
157 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
158
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159 sent = wev->available;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
160
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161 } else {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 if (WSAGetOverlappedResult(c->fd, (LPWSAOVERLAPPED) &wev->ovlp,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163 &sent, 0, NULL)
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
164 == 0)
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165 {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166 ngx_connection_error(c, ngx_socket_errno,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167 "WSASend() or WSAGetOverlappedResult() failed");
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169 return NGX_ERROR;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174 "WSAGetOverlappedResult: fd:%d, %ul of %uz",
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
175 c->fd, sent, size);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177 if (sent < size) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178 wev->ready = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
179 }
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
180
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
181 c->sent += sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
182
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
183 return sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184 }