Mercurial > hg > nginx-vendor-1-0
comparison src/os/unix/ngx_freebsd_sendfile_chain.c @ 28:7ca9bdc82b3f NGINX_0_1_14
nginx 0.1.14
*) Feature: the autoconfiguration directives:
--http-client-body-temp-path=PATH, --http-proxy-temp-path=PATH, and
--http-fastcgi-temp-path=PATH
*) Change: the directory name for the temporary files with the client
request body is specified by directive client_body_temp_path, by
default it is <prefix>/client_body_temp.
*) Feature: the ngx_http_fastcgi_module and the directives:
fastcgi_pass, fastcgi_root, fastcgi_index, fastcgi_params,
fastcgi_connect_timeout, fastcgi_send_timeout, fastcgi_read_timeout,
fastcgi_send_lowat, fastcgi_header_buffer_size, fastcgi_buffers,
fastcgi_busy_buffers_size, fastcgi_temp_path,
fastcgi_max_temp_file_size, fastcgi_temp_file_write_size,
fastcgi_next_upstream, and fastcgi_x_powered_by.
*) Bugfix: the "[alert] zero size buf" error; bug appeared in 0.1.3.
*) Change: the URI must be specified after the host name in the
proxy_pass directive.
*) Change: the %3F symbol in the URI was considered as the argument
string start.
*) Feature: the unix domain sockets support in the
ngx_http_proxy_module.
*) Feature: the ssl_engine and ssl_ciphers directives.
Thanks to Sergey Skvortsov for SSL-accelerator.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Tue, 18 Jan 2005 00:00:00 +0300 |
parents | 45fe5b98a9de |
children | da8c190bdaba |
comparison
equal
deleted
inserted
replaced
27:66901c2556fd | 28:7ca9bdc82b3f |
---|---|
8 #include <ngx_core.h> | 8 #include <ngx_core.h> |
9 #include <ngx_event.h> | 9 #include <ngx_event.h> |
10 | 10 |
11 | 11 |
12 /* | 12 /* |
13 * Although FreeBSD sendfile() allows to pass a header and a trailer | 13 * Although FreeBSD sendfile() allows to pass a header and a trailer, |
14 * it can not send a header with a part of the file in one packet until | 14 * it can not send a header with a part of the file in one packet until |
15 * FreeBSD 5.3. Besides over the fast ethernet connection sendfile() | 15 * FreeBSD 5.3. Besides, over the fast ethernet connection sendfile() |
16 * may send the partially filled packets, i.e. the 8 file pages may be sent | 16 * may send the partially filled packets, i.e. the 8 file pages may be sent |
17 * as the 11 full 1460-bytes packets, then one incomplete 324-bytes packet, | 17 * as the 11 full 1460-bytes packets, then one incomplete 324-bytes packet, |
18 * and then again the 11 full 1460-bytes packets. | 18 * and then again the 11 full 1460-bytes packets. |
19 * | 19 * |
20 * So we use the TCP_NOPUSH option (similar to Linux's TCP_CORK) | 20 * Threfore we use the TCP_NOPUSH option (similar to Linux's TCP_CORK) |
21 * to postpone the sending - it not only sends a header and the first part | 21 * to postpone the sending - it not only sends a header and the first part of |
22 * of the file in one packet but also sends the file pages in the full packets. | 22 * the file in one packet, but also sends the file pages in the full packets. |
23 * | 23 * |
24 * But until FreeBSD 4.5 the turning TCP_NOPUSH off does not flush a pending | 24 * But until FreeBSD 4.5 the turning TCP_NOPUSH off does not flush a pending |
25 * data that less than MSS so that data may be sent with 5 second delay. | 25 * data that less than MSS so that data may be sent with 5 second delay. |
26 * So we do not use TCP_NOPUSH on FreeBSD prior to 4.5 although it can be used | 26 * So we do not use TCP_NOPUSH on FreeBSD prior to 4.5 although it can be used |
27 * for non-keepalive HTTP connections. | 27 * for non-keepalive HTTP connections. |
218 { | 218 { |
219 if (ngx_tcp_nopush(c->fd) == NGX_ERROR) { | 219 if (ngx_tcp_nopush(c->fd) == NGX_ERROR) { |
220 err = ngx_errno; | 220 err = ngx_errno; |
221 | 221 |
222 /* | 222 /* |
223 * there is a tiny chance to be interrupted, however | 223 * there is a tiny chance to be interrupted, however, |
224 * we continue a processing without the TCP_NOPUSH | 224 * we continue a processing without the TCP_NOPUSH |
225 */ | 225 */ |
226 | 226 |
227 if (err != NGX_EINTR) { | 227 if (err != NGX_EINTR) { |
228 wev->error = 1; | 228 wev->error = 1; |
247 /* | 247 /* |
248 * the "nbytes bug" of the old sendfile() syscall: | 248 * the "nbytes bug" of the old sendfile() syscall: |
249 * http://www.freebsd.org/cgi/query-pr.cgi?pr=33771 | 249 * http://www.freebsd.org/cgi/query-pr.cgi?pr=33771 |
250 */ | 250 */ |
251 | 251 |
252 if (ngx_freebsd_sendfile_nbytes_bug == 0) { | 252 if (!ngx_freebsd_sendfile_nbytes_bug) { |
253 header_size = 0; | 253 header_size = 0; |
254 } | 254 } |
255 | 255 |
256 sent = 0; | 256 sent = 0; |
257 | 257 |
280 } | 280 } |
281 | 281 |
282 if (rc == 0 && sent == 0) { | 282 if (rc == 0 && sent == 0) { |
283 | 283 |
284 /* | 284 /* |
285 * rc and sent are equals to zero when someone has truncated | 285 * rc and sent equal to zero when someone has truncated |
286 * the file, so the offset became beyond the end of the file | 286 * the file, so the offset became beyond the end of the file |
287 */ | 287 */ |
288 | 288 |
289 ngx_log_error(NGX_LOG_ALERT, c->log, 0, | 289 ngx_log_error(NGX_LOG_ALERT, c->log, 0, |
290 "sendfile() reported that \"%s\" was truncated", | 290 "sendfile() reported that \"%s\" was truncated", |
368 } | 368 } |
369 | 369 |
370 if (eagain) { | 370 if (eagain) { |
371 | 371 |
372 /* | 372 /* |
373 * sendfile() can return EAGAIN even if it has sent | 373 * sendfile() may return EAGAIN, even if it has sent a whole file |
374 * a whole file part but the successive sendfile() call would | 374 * part, it indicates that the successive sendfile() call would |
375 * return EAGAIN right away and would not send anything. | 375 * return EAGAIN right away and would not send anything. |
376 * We use it as a hint. | 376 * We use it as a hint. |
377 */ | 377 */ |
378 | 378 |
379 wev->ready = 0; | 379 wev->ready = 0; |