haproxy/src
Willy Tarreau 659d7bc4e3 [BUG] checks: don't abort when second poll returns an error
Now that the response may be fragmented, we may receive early notifications
of aborts in return of poll(), as indicated below, which currently cause
an early error detection :

  21:11:21.036600 epoll_wait(3, {{EPOLLIN, {u32=7, u64=7}}}, 8, 993) = 1
  21:11:21.054361 gettimeofday({1268770281, 54467}, NULL) = 0
  21:11:21.054540 recv(7, "H"..., 8030, 0) = 1
  21:11:21.054694 recv(7, 0x967e759, 8029, 0) = -1 EAGAIN (Resource temporarily unavailable)
  21:11:21.054843 epoll_wait(3, {{EPOLLIN|EPOLLERR|EPOLLHUP, {u32=7, u64=7}}}, 8, 975) = 1
  21:11:21.060274 gettimeofday({1268770281, 60386}, NULL) = 0
  21:11:21.060454 close(7)                = 0

Just as in stream_sock, we must not believe poll() without attempting to receive,
which fixes the issue :

  21:11:59.402207 recv(7, "H"..., 8030, 0) = 1
  21:11:59.402362 recv(7, 0x8b5c759, 8029, 0) = -1 EAGAIN (Resource temporarily unavailable)
  21:11:59.402511 epoll_wait(3, {{EPOLLIN|EPOLLERR|EPOLLHUP, {u32=7, u64=7}}}, 8, 974) = 1
  21:11:59.407242 gettimeofday({1268770319, 407353}, NULL) = 0
  21:11:59.407425 recv(7, "TTP/1.0 200 OK\r\n"..., 8029, 0) = 16
  21:11:59.407606 recv(7, 0x8b5c769, 8013, 0) = -1 ECONNRESET (Connection reset by peer)
  21:11:59.407753 shutdown(7, 2 /* send and receive */) = -1 ENOTCONN (Transport endpoint is not connected)
2010-03-16 22:57:27 +01:00
..
acl.c [BUG] don't merge anonymous ACLs ! 2010-03-15 16:13:29 +01:00
appsession.c [MINOR] task: keep a task count and clean up task creators 2009-03-21 18:13:21 +01:00
auth.c [BUILD] fix platform-dependant build issues related to crypt() 2010-03-04 19:10:14 +01:00
backend.c [MINOR] add the "force-persist" statement to force persistence on down servers 2010-01-22 19:10:05 +01:00
base64.c [MINOR] Base64 decode 2010-01-31 19:14:07 +01:00
buffers.c [BUILD] fix some build warnings on Solaris with is* macros 2010-03-03 00:16:00 +01:00
cfgparse.c [MEDIUM] checks: support multi-packet health check responses 2010-03-16 22:57:26 +01:00
checks.c [BUG] checks: don't abort when second poll returns an error 2010-03-16 22:57:27 +01:00
client.c [MINOR] add the ability to force kernel socket buffer size. 2010-01-22 11:49:41 +01:00
cttproxy.c [CLEANUP] remove many #include <types/xxx> from C files 2008-07-16 10:30:42 +02:00
dumpstats.c [BUG] stats: connection reset counters must be plain ascii, not HTML 2010-03-05 18:15:23 +01:00
ev_epoll.c [BUG] O(1) pollers should check their FD before closing it 2009-05-10 10:18:54 +02:00
ev_kqueue.c [BUG] O(1) pollers should check their FD before closing it 2009-05-10 10:18:54 +02:00
ev_poll.c [MEDIUM] pollers: don't wait if a signal is pending 2009-05-10 09:57:21 +02:00
ev_select.c [MEDIUM] pollers: don't wait if a signal is pending 2009-05-10 09:57:21 +02:00
ev_sepoll.c [MEDIUM] fd: merge fd_list into fdtab 2009-10-18 08:20:26 +02:00
fd.c [OPTIM] move some rarely used fields out of fdtab 2009-10-18 08:17:33 +02:00
freq_ctr.c [OPTIM] freq_ctr: do not rotate the counters when reading 2009-03-06 14:29:25 +01:00
haproxy.c [MEDIUM] checks: support multi-packet health check responses 2010-03-16 22:57:26 +01:00
hdr_idx.c [CLEANUP] remove many #include <types/xxx> from C files 2008-07-16 10:30:42 +02:00
lb_chash.c [MEDIUM] build: switch ebtree users to use new ebtree version 2009-10-26 21:10:04 +01:00
lb_fwlc.c [MEDIUM] build: switch ebtree users to use new ebtree version 2009-10-26 21:10:04 +01:00
lb_fwrr.c [MEDIUM] build: switch ebtree users to use new ebtree version 2009-10-26 21:10:04 +01:00
lb_map.c [BUG] url_param hash may return a down server 2010-03-12 06:22:16 +01:00
log.c [CLEANUP] remove ifdef MSG_NOSIGNAL and define it instead 2009-08-19 11:25:08 +02:00
memory.c [MEDIUM] ensure we don't recursively call pool_gc2() 2009-04-21 02:17:45 +02:00
pattern.c [CLEANUP] acl, patterns: make use of my_strndup() instead of malloc+memcpy 2010-01-26 19:02:46 +01:00
pipe.c [MEDIUM] introduce pipe pools 2009-01-25 13:49:53 +01:00
proto_http.c [MINOR] http: don't mark a server as failed when it returns 501/505 2010-03-15 19:44:39 +01:00
proto_tcp.c [CLEANUP] config: use build_acl_cond() instead of parse_acl_cond() 2010-01-28 17:12:36 +01:00
proto_uxst.c [DOC] Some more documentation cleanups 2010-03-12 06:46:06 +01:00
protocols.c [CLEANUP] remove many #include <types/xxx> from C files 2008-07-16 10:30:42 +02:00
proxy.c [MINOR] report total number of processed connections when stopping a proxy 2010-03-04 23:07:28 +01:00
queue.c [OPTIM] counters: move some max numbers to the counters struct 2009-10-04 23:26:19 +02:00
rbtree.c [MINOR] imported the rbtree function from Linux kernel 2007-01-07 02:12:57 +01:00
regex.c [MINOR] prepare req_*/rsp_* to receive a condition 2010-01-28 18:10:50 +01:00
server.c [CLEANUP] remove many #include <types/xxx> from C files 2008-07-16 10:30:42 +02:00
session.c [MEDIUM] connect to servers even when the input has already been closed 2010-03-14 19:21:34 +01:00
sessionhash.c [PATCH] appsessions: cleanup DEBUG_HASH and initialize request_counter 2008-08-13 23:43:26 +02:00
signal.c [BUILD] fix a minor build warning on AIX 2009-07-26 17:32:11 +02:00
standard.c [BUILD] fix some build warnings on Solaris with is* macros 2010-03-03 00:16:00 +01:00
stick_table.c [MEDIUM] Add stick table (persistence) management functions and types 2010-01-12 11:23:15 +01:00
stream_interface.c [BUG] stream_interface: fix retnclose and remove cond_close 2010-01-10 10:21:21 +01:00
stream_sock.c [OPTIM] stream_sock: don't shutdown(write) when the socket is in error 2010-01-16 10:03:45 +01:00
task.c [MEDIUM] build: switch ebtree users to use new ebtree version 2009-10-26 21:10:04 +01:00
time.c [MINOR] add curr_sec_ms and curr_sec_ms_scaled for current second. 2009-03-05 16:56:16 +01:00
uri_auth.c [MAJOR] use the new auth framework for http stats 2010-01-31 19:14:09 +01:00