]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: tcp: set the ADDR_TO_SET flag on outgoing connections
authorWilly Tarreau <w@1wt.eu>
Sat, 8 Dec 2012 17:53:44 +0000 (18:53 +0100)
committerWilly Tarreau <w@1wt.eu>
Sat, 8 Dec 2012 17:53:44 +0000 (18:53 +0100)
tcp_connect_server() resets all of the connection's flags. This means
that an outgoing connection does not have the ADDR_TO_SET flag
eventhough the address is set.

The first impact is that logging the outgoing address or displaying
it on the CLI while dumping sessions will result in an extra call to
getpeername().

But there is a nastier impact. If such a lookup happens *after* the
first connect() attempt and this one fails, the destination address
is corrupted by the call to getsockname(), and subsequent connection
retries will fail with socket errors.

For now we fix this by making tcp_connect_server() set the flag. But
we'll soon need a function to initialize an outgoing connection with
appropriate address and flags before calling the connect() function.

src/proto_tcp.c

index 551603677af887431b14467038b09db2061f69f9..0df4abadbdd488b008f60c98fd73388ab2afa1f4 100644 (file)
@@ -470,6 +470,7 @@ int tcp_connect_server(struct connection *conn, int data, int delack)
 
        fdtab[fd].owner = conn;
        conn->flags  = CO_FL_WAIT_L4_CONN; /* connection in progress */
+       conn->flags |= CO_FL_ADDR_TO_SET;
 
        fdtab[fd].iocb = conn_fd_handler;
        fd_insert(fd);