annotate src/os/win32/ngx_wsasend.c @ 4437:3a1507f48686 stable-1.0

Merge of r4372, r4373, r4374: SCGI fixes: *) Fixed incorrect use of r->http_version in scgi module. The r->http_version is a version of client's request, and modules must not set it unless they are really willing to downgrade protocol version used for a response (i.e. to HTTP/0.9 if no response headers are available). In neither case r->http_version may be upgraded. The former code downgraded response from HTTP/1.1 to HTTP/1.0 for no reason, causing various problems (see ticket #66). It was also possible that HTTP/0.9 requests were upgraded to HTTP/1.0. *) Removed duplicate function declaration. *) Removed error if there is no Status header. The SCGI specification doesn't specify format of the response, and assuming CGI specs should be used there is no reason to complain. RFC 3875 explicitly states that "A Status header field is optional, and status 200 'OK' is assumed if it is omitted".
author Maxim Dounin <mdounin@mdounin.ru>
date Sun, 05 Feb 2012 13:53:50 +0000
parents d43d73277c5c
children d620f497c50f
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
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
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 #include <ngx_config.h>
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_event.h>
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
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 ssize_t
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 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
14 {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 int n;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 u_long sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 ngx_err_t err;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 ngx_event_t *wev;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 WSABUF wsabuf;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 wev = c->write;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 if (!wev->ready) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 return NGX_AGAIN;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 }
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 * WSABUF must be 4-byte aligned otherwise
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 * WSASend() will return undocumented WSAEINVAL error.
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 */
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 wsabuf.buf = (char *) buf;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 wsabuf.len = size;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35 sent = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 n = WSASend(c->fd, &wsabuf, 1, &sent, 0, NULL, NULL);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 "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
41
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 if (n == 0) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 if (sent < size) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 wev->ready = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45 }
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 c->sent += sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 return sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 }
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 err = ngx_socket_errno;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54 if (err == WSAEWOULDBLOCK) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 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
56 return NGX_AGAIN;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 }
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 wev->error = 1;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 ngx_connection_error(c, err, "WSASend() failed");
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 return NGX_ERROR;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 }
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 ssize_t
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 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
68 {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 int n;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 u_long sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 ngx_err_t err;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 ngx_event_t *wev;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 LPWSAOVERLAPPED ovlp;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 WSABUF wsabuf;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76 wev = c->write;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78 if (!wev->ready) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79 return NGX_AGAIN;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 }
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 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83 "wev->complete: %d", wev->complete);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 if (!wev->complete) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87 /* post the overlapped WSASend() */
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88
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 * WSABUFs must be 4-byte aligned otherwise
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 * WSASend() will return undocumented WSAEINVAL error.
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 */
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 wsabuf.buf = (char *) buf;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 wsabuf.len = size;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 sent = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99 ovlp = (LPWSAOVERLAPPED) &c->write->ovlp;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 ngx_memzero(ovlp, sizeof(WSAOVERLAPPED));
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 n = WSASend(c->fd, &wsabuf, 1, &sent, 0, ovlp, NULL);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 "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
106
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 wev->complete = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109 if (n == 0) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111
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 * if a socket was bound with I/O completion port then
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 * GetQueuedCompletionStatus() would anyway return its status
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 * despite that WSASend() was already complete
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 */
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 wev->active = 1;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 return NGX_AGAIN;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 }
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 if (sent < size) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 wev->ready = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 }
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 c->sent += sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 return sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 }
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 err = ngx_socket_errno;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 if (err == WSA_IO_PENDING) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135 "WSASend() posted");
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136 wev->active = 1;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137 return NGX_AGAIN;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
138 }
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 wev->error = 1;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
141 ngx_connection_error(c, err, "WSASend() failed");
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143 return NGX_ERROR;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144 }
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 /* the overlapped WSASend() complete */
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148 wev->complete = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149 wev->active = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
151 if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153 if (wev->ovlp.error) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154 ngx_connection_error(c, wev->ovlp.error, "WSASend() failed");
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
155 return NGX_ERROR;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156 }
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 sent = wev->available;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
160 } else {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161 if (WSAGetOverlappedResult(c->fd, (LPWSAOVERLAPPED) &wev->ovlp,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 &sent, 0, NULL)
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163 == 0)
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
164 {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165 ngx_connection_error(c, ngx_socket_errno,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166 "WSASend() or WSAGetOverlappedResult() failed");
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 return NGX_ERROR;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169 }
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 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173 "WSAGetOverlappedResult: fd:%d, %ul of %uz",
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174 c->fd, sent, size);
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
175
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176 if (sent < size) {
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177 wev->ready = 0;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178 }
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 c->sent += sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
181
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
182 return sent;
d43d73277c5c Win32 master/workers model
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
183 }