Mercurial > hg > nginx
comparison src/event/ngx_event_accept.c @ 7005:3e2d90073adf
Fixed deferred accept with EPOLLRDHUP enabled (ticket #1278).
Previously, the read event of the accepted connection was marked ready, but not
available. This made EPOLLRDHUP-related code (for example, in ngx_unix_recv())
expect more data from the socket, leading to unexpected behavior.
For example, if SSL, PROXY protocol and deferred accept were enabled on a listen
socket, the client connection was aborted due to unexpected return value of
c->recv().
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Wed, 24 May 2017 13:17:08 +0300 |
parents | 56fc55e32f23 |
children | fef61d26da39 |
comparison
equal
deleted
inserted
replaced
7004:b624fbf7bee2 | 7005:3e2d90073adf |
---|---|
236 rev->ready = 1; | 236 rev->ready = 1; |
237 } | 237 } |
238 | 238 |
239 if (ev->deferred_accept) { | 239 if (ev->deferred_accept) { |
240 rev->ready = 1; | 240 rev->ready = 1; |
241 #if (NGX_HAVE_KQUEUE) | 241 #if (NGX_HAVE_KQUEUE || NGX_HAVE_EPOLLRDHUP) |
242 rev->available = 1; | 242 rev->available = 1; |
243 #endif | 243 #endif |
244 } | 244 } |
245 | 245 |
246 rev->log = log; | 246 rev->log = log; |