comparison src/os/unix/ngx_freebsd_sendfile_chain.c @ 214:e0c502f15852

nginx-0.0.1-2003-12-22-12:40:48 import
author Igor Sysoev <igor@sysoev.ru>
date Mon, 22 Dec 2003 09:40:48 +0000
parents c9da5900c79e
children f1d0e5f09c1e
comparison
equal deleted inserted replaced
213:f536f91e8e99 214:e0c502f15852
42 } 42 }
43 43
44 #if (HAVE_KQUEUE) 44 #if (HAVE_KQUEUE)
45 45
46 if ((ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) && wev->kq_eof) { 46 if ((ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) && wev->kq_eof) {
47 ngx_log_error(NGX_LOG_ERR, c->log, wev->kq_errno, 47 ngx_log_error(NGX_LOG_INFO, c->log, wev->kq_errno,
48 "kevent() reported about closed connection"); 48 "kevent() reported about closed connection");
49 49
50 wev->error = 1; 50 wev->error = 1;
51 return NGX_CHAIN_ERROR; 51 return NGX_CHAIN_ERROR;
52 } 52 }
151 if (file) { 151 if (file) {
152 152
153 if (ngx_freebsd_use_tcp_nopush && !c->tcp_nopush) { 153 if (ngx_freebsd_use_tcp_nopush && !c->tcp_nopush) {
154 c->tcp_nopush = 1; 154 c->tcp_nopush = 1;
155 155
156 ngx_log_debug(c->log, "NOPUSH"); 156 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, "tcp_nopush");
157 157
158 if (ngx_tcp_nopush(c->fd) == NGX_ERROR) { 158 if (ngx_tcp_nopush(c->fd) == NGX_ERROR) {
159 ngx_log_error(NGX_LOG_CRIT, c->log, ngx_errno, 159 ngx_log_error(NGX_LOG_CRIT, c->log, ngx_errno,
160 ngx_tcp_nopush_n " failed"); 160 ngx_tcp_nopush_n " failed");
161 return NGX_CHAIN_ERROR; 161 return NGX_CHAIN_ERROR;
191 if (err == NGX_EAGAIN) { 191 if (err == NGX_EAGAIN) {
192 eagain = 1; 192 eagain = 1;
193 } 193 }
194 194
195 if (err == NGX_EAGAIN || err == NGX_EINTR) { 195 if (err == NGX_EAGAIN || err == NGX_EINTR) {
196 ngx_log_error(NGX_LOG_INFO, c->log, err, 196 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
197 "sendfile() sent only " OFF_T_FMT " bytes", 197 "sendfile() sent only " OFF_T_FMT " bytes",
198 sent); 198 sent);
199 199
200 } else { 200 } else {
201 wev->error = 1; 201 wev->error = 1;
202 ngx_log_error(NGX_LOG_CRIT, c->log, err, 202 ngx_log_error(NGX_LOG_CRIT, c->log, err,
203 "sendfile() failed"); 203 "sendfile() failed");
204 return NGX_CHAIN_ERROR; 204 return NGX_CHAIN_ERROR;
205 } 205 }
206 } 206 }
207 207
208 #if (NGX_DEBUG_WRITE_CHAIN) 208 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
209 ngx_log_debug(c->log, "sendfile: %d, @%qd %qd:%d" _ 209 "sendfile: %d, @" OFF_T_FMT " " OFF_T_FMT ":%d",
210 rc _ file->file_pos _ sent _ fsize + hsize); 210 rc, file->file_pos, sent, fsize + hsize);
211 #endif
212 211
213 } else { 212 } else {
214 rc = writev(c->fd, header.elts, header.nelts); 213 rc = writev(c->fd, header.elts, header.nelts);
215 214
216 if (rc == -1) { 215 if (rc == -1) {
217 err = ngx_errno; 216 err = ngx_errno;
218 if (err == NGX_EAGAIN) { 217
219 ngx_log_error(NGX_LOG_INFO, c->log, err, "writev() EAGAIN"); 218 if (err == NGX_EINTR) {
220
221 } else if (err == NGX_EINTR) {
222 eintr = 1; 219 eintr = 1;
223 ngx_log_error(NGX_LOG_INFO, c->log, err, "writev() EINTR"); 220 }
221
222 if (err == NGX_EAGAIN || err == NGX_EINTR) {
223 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
224 "writev() not ready");
224 225
225 } else { 226 } else {
226 wev->error = 1; 227 wev->error = 1;
227 ngx_log_error(NGX_LOG_CRIT, c->log, err, "writev() failed"); 228 ngx_log_error(NGX_LOG_CRIT, c->log, err, "writev() failed");
228 return NGX_CHAIN_ERROR; 229 return NGX_CHAIN_ERROR;
229 } 230 }
230 } 231 }
231 232
232 sent = rc > 0 ? rc : 0; 233 sent = rc > 0 ? rc : 0;
233 234
234 #if (NGX_DEBUG_WRITE_CHAIN) 235 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
235 ngx_log_debug(c->log, "writev: %qd" _ sent); 236 "writev: " OFF_T_FMT, sent);
236 #endif
237 } 237 }
238 238
239 c->sent += sent; 239 c->sent += sent;
240 240
241 for (cl = in; cl; cl = cl->next) { 241 for (cl = in; cl; cl = cl->next) {