thank you!<br><br><div class="gmail_quote">On Mon, Nov 8, 2010 at 1:34 AM, Maxim Dounin <span dir="ltr"><<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hello!<br>
<div class="im"><br>
On Mon, Nov 08, 2010 at 12:33:04AM +0800, BoBo wrote:<br>
<br>
</div><div class="im">> this patch suit for nginx-0.8.53, and i test in my arch linux. Thanks.<br>
><br>
> diff -Naur nginx-0.8.53/auto/os/features<br>
> nginx-0.8.53_accpet4/auto/os/features<br>
> --- nginx-0.8.53/auto/os/features 2010-07-05 21:49:16.000000000 +0800<br>
> +++ nginx-0.8.53_accpet4/auto/os/features 2010-11-08 00:20:28.126666705<br>
> +0800<br>
> @@ -352,3 +352,12 @@<br>
> fi<br>
> fi<br>
> fi<br>
> +<br>
> +ngx_feature="accept4()"<br>
> +ngx_feature_name="NGX_HAVE_ACCEPT4"<br>
> +ngx_feature_run=no<br>
> +ngx_feature_incs="#include <sys/socket.h>"<br>
> +ngx_feature_path=<br>
> +ngx_feature_libs=<br>
> +ngx_feature_test="accept4(0, NULL, NULL, SOCK_NONBLOCK)"<br>
> +. auto/feature<br>
<br>
</div>What happens when host has new glibc but old kernel? I assume<br>
this test would succeed, but accept4() call will fail with ENOSYS.<br>
<br>
Another question to consider is what to do with packages built on<br>
host with accept4() but used on hosts without. Probably some<br>
runtime fallback to usual accept() is needed.<br></blockquote><div><br></div><div>thank you,I will test this situation. </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
> diff -Naur nginx-0.8.53/src/event/ngx_event_accept.c<br>
> nginx-0.8.53_accpet4/src/event/ngx_event_accept.c<br>
> --- nginx-0.8.53/src/event/ngx_event_accept.c 2009-11-02 03:29:49.000000000<br>
> +0800<br>
> +++ nginx-0.8.53_accpet4/src/event/ngx_event_accept.c 2010-11-08<br>
> 00:27:21.630000043 +0800<br>
> @@ -45,8 +45,12 @@<br>
><br>
> do {<br>
> socklen = NGX_SOCKADDRLEN;<br>
> -<br>
> +<br>
> +#if (NGX_HAVE_ACCEPT4)<br>
> + s = accept4(lc->fd, (struct sockaddr *) sa, &socklen,<br>
> SOCK_NONBLOCK);<br>
> +#else<br>
> s = accept(lc->fd, (struct sockaddr *) sa, &socklen);<br>
> +#endif<br>
><br>
> if (s == -1) {<br>
> err = ngx_socket_errno;<br>
> @@ -115,9 +119,9 @@<br>
> ngx_close_accepted_connection(c);<br>
> return;<br>
> }<br>
> -<br>
> +<br>
<br>
</div>Stray -/+ probably indicate some unrelated whitespace changes<br>
(though patch seems to be corrupted by MUA anyway).<br></blockquote><div><br></div><div>this is my mistake. </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
> +#ifndef NGX_HAVE_ACCEPT4<br>
> /* set a blocking mode for aio and non-blocking mode for others */<br>
> -<br>
> if (ngx_inherited_nonblocking) {<br>
> if (ngx_event_flags & NGX_USE_AIO_EVENT) {<br>
> if (ngx_blocking(s) == -1) {<br>
> @@ -138,7 +142,8 @@<br>
> }<br>
> }<br>
> }<br>
> -<br>
> +#endif<br>
<br>
</div>This part is wrong: with socket AIO sockets should be set to<br>
blocking mode. The same code path as with<br>
ngx_inherited_nonblocking should be followed.<br>
<div><div></div><div class="h5"><br></div></div></blockquote><div> </div><div>in linux platform , NGX_HAVE_INHERITED_NONBLOCK is 0, and in ngx_os_init:</div><div><br></div><div><div>#if (NGX_HAVE_INHERITED_NONBLOCK)</div>
<div> ngx_inherited_nonblocking = 1;</div><div>#else</div><div> ngx_inherited_nonblocking = 0;</div><div>#endif</div></div><meta charset="utf-8"><div><br></div><div><br></div></div><br><br clear="all"><br>-- <br>博观约取<br>
<br>豆瓣:<a href="http://www.douban.com/people/mustang/" target="_blank">www.douban.com/people/mustang/</a><br><br>blog: <a href="http://www.pagefault.info" target="_blank">www.pagefault.info</a><br><br>twitter: <a href="http://www.twitter.com/minibobo" target="_blank">www.twitter.com/minibobo</a><br>