Opened 12 years ago
Last modified 3 years ago
#320 accepted enhancement
nginx should reliably check client connection close with pending data
Reported by: | Sergey Kandaurov | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | nginx-core | Version: | 1.3.x |
Keywords: | Cc: | ||
uname -a: | |||
nginx -V: | n/a |
Description (last modified by )
To detect if a connection was closed by a client, nginx uses:
- A EV_EOF flag as reported by kqueue. This only works if you use kqueue, i.e. on FreeBSD and friends.
- The recv(MSG_PEEK) call to test a case when connection was closed. This works on all platforms, but only if there are no pending data.
Most notably, this doesn't cover Linux and SSL connections, which are usually closed with pending data (a shutdown alert). To improve things, the following should be implemented (in no particular order):
- SSL_peek() for SSL connections instead of recv(MSG_PEEK), likely with additional c->peek() call.
- Support for EPOLLRDHUP, which is believed to be close to EV_EOF provided by kqueue.
References:
http://mailman.nginx.org/pipermail/nginx/2011-June/027669.html
http://mailman.nginx.org/pipermail/nginx/2011-November/030614.html
http://mailman.nginx.org/pipermail/nginx/2013-March/038119.html
Change History (10)
comment:1 by , 12 years ago
Description: | modified (diff) |
---|
comment:2 by , 12 years ago
Owner: | set to |
---|---|
Status: | new → assigned |
comment:3 by , 11 years ago
comment:7 by , 11 years ago
Replying to Maxim Dounin <mdounin@mdounin.ru>:
Shouldn't we close this ticket? Valentin?
I don't think so. We still lack of the SSL_peek() support.
comment:8 by , 3 years ago
Status: | assigned → accepted |
---|
comment:9 by , 3 years ago
Owner: | removed |
---|---|
Status: | accepted → assigned |
comment:10 by , 3 years ago
Status: | assigned → accepted |
---|
In 36b58ddb566d87d0a8b7dd81d633d5e4b0f54bca/nginx: