annotate src/os/win32/ngx_wsasend.c @ 4687:7f50a4063100

Mp4: fixed non-keyframe seeks in some cases (ticket #175). Number of entries in stsc atom was wrong if we've added an entry to split a chunk. Additionally, there is no need to add an entry if we are going to split last chunk in an entry, it's enough to update the entry we already have. Previously new entry was added and old one was left as is, resulting in incorrect entry with zero chunks which might confuse some software.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 18 Jun 2012 14:01:18 +0000
parents d620f497c50f
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
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
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 }