if client closes a connection prematurely, then epoll (at least in Linux 2.6.16) sends EPOLLERR|EPOLLHUP|EPOLLIN only and writer does not know about the error
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c index b366f79..c2e18b6 100644 --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c
@@ -1653,6 +1653,7 @@ r->http_state = NGX_HTTP_WRITING_REQUEST_STATE; + r->read_event_handler = ngx_http_block_read; r->write_event_handler = ngx_http_writer; wev = r->connection->write;