mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 07:07:04 +02:00
* The 'retries' option was not used because the connect() could not return
an error if the connection was refused before the the timeout. So the client was sent to the server anyway and then got its connection broken because of the write error. This is not a real problem with persistence, but it definitely is for new clients. This stupid bug must have been present for years !
This commit is contained in:
parent
a56eca75f5
commit
48b06594b9
14
haproxy.c
14
haproxy.c
@ -2281,6 +2281,20 @@ int event_srv_write(int fd) {
|
||||
if (fdtab[fd].state != FD_STERROR) {
|
||||
if (max == 0) {
|
||||
/* may be we have received a connection acknowledgement in TCP mode without data */
|
||||
if (s->srv_state == SV_STCONN) {
|
||||
int skerr;
|
||||
socklen_t lskerr = sizeof(skerr);
|
||||
getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
|
||||
if (skerr) {
|
||||
s->res_sw = RES_ERROR;
|
||||
fdtab[fd].state = FD_STERROR;
|
||||
task_wakeup(&rq, t);
|
||||
tv_eternity(&s->swexpire);
|
||||
FD_CLR(fd, StaticWriteEvent);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
s->res_sw = RES_NULL;
|
||||
task_wakeup(&rq, t);
|
||||
fdtab[fd].state = FD_STREADY;
|
||||
|
Loading…
Reference in New Issue
Block a user