haproxy/include/proto
Willy Tarreau d6f087ea1c [BUG] fix truncated responses with sepoll
Due to the way Linux delivers EPOLLIN and EPOLLHUP, a closed connection
received after some server data sometimes results in truncated responses
if the client disconnects before server starts to respond. The reason
is that the EPOLLHUP flag is processed as an indication of end of
transfer while some data may remain in the system's socket buffers.

This problem could only be triggered with sepoll, although nothing should
prevent it from happening with normal epoll. In fact, the work factoring
performed by sepoll increases the risk that this bug appears.

The fix consists in making FD_POLL_HUP and FD_POLL_ERR sticky and that
they are only checked if FD_POLL_IN is not set, meaning that we have
read all pending data.

That way, the problem is definitely fixed and sepoll still remains about
17% faster than epoll since it can take into account all information
returned by the kernel.
2008-01-18 17:20:13 +01:00
..
acl.h [MEDIUM] acl: added the TRUE and FALSE ACLs. 2007-06-17 20:40:25 +02:00
backend.h [MAJOR] implement the Fast Weighted Round Robin (FWRR) algo 2007-11-28 14:23:17 +01:00
buffers.h [BUG] do not re-arm read timeout after writing data 2007-06-03 16:03:49 +02:00
checks.h [MEDIUM] Spread health checks even more 2007-10-15 09:33:10 +02:00
client.h [MEDIUM] store the original destination address in the session 2007-05-08 23:24:20 +02:00
cttproxy.h [MEDIUM] check for cttproxy support when required 2007-03-24 17:24:39 +01:00
dumpstats.h [STATS] add support for "show info" on the unix socket 2008-01-03 10:19:15 +01:00
fd.h [BUG] fix truncated responses with sepoll 2008-01-18 17:20:13 +01:00
hdr_idx.h [MAJOR] huge rework of the HTTP request FSM 2007-01-21 19:16:41 +01:00
httperr.h [MEDIUM] errorloc now checked first from backend then from frontend 2006-12-24 17:47:20 +01:00
log.h [MAJOR] ported requri to use mempools v2 2007-05-13 21:36:56 +02:00
proto_http.h [MAJOR] replaced all timeouts with struct timeval 2007-05-12 22:35:00 +02:00
proto_tcp.h [MEDIUM] fix server health checks source address selection 2008-01-13 18:40:14 +01:00
proto_uxst.h [MINOR] add a generic delete_listener() primitive 2007-11-04 22:42:49 +01:00
protocols.h [MINOR] add a generic unbind_all_listeners() primitive 2007-11-04 22:42:49 +01:00
proxy.h [MEDIUM] introduce the "timeout" keyword 2007-12-03 01:30:13 +01:00
queue.h [MAJOR] ported pendconn to mempools v2 2007-05-13 20:19:55 +02:00
senddata.h [MEDIUM] moved stats and buffer generic functions to new files 2007-10-18 14:12:21 +02:00
server.h [MEDIUM] stats: report server and backend cumulated downtime 2007-10-22 21:36:23 +02:00
session.h [MEDIUM] continous statistics 2007-11-26 20:21:47 +01:00
stream_sock.h [MEDIUM] got rid of event_{cli,srv}_write() in favor of stream_sock_write() 2006-07-29 19:01:31 +02:00
task.h [MAJOR] migrated task, tree64 and session to pool2 2007-05-13 19:43:47 +02:00
template.h [CLEANUP] included common/version.h everywhere 2006-06-29 18:54:54 +02:00