MEDIUM: connection: only call tcp_connect_probe when nothing was attempted yet
It was observed that after a failed send() on EAGAIN, a second connect()
would still be attempted in tcp_connect_probe() because there was no way
to know that a send() had failed.
By checking the WANT_WR status flag, we know if a previous write attempt
failed on EAGAIN, so we don't try to connect again if we know this has
already failed.
With this simple change, the second connect() has disappeared.
diff --git a/src/connection.c b/src/connection.c
index 6ed4408..15b9485 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -89,9 +89,10 @@
if (unlikely(conn->flags & CO_FL_HANDSHAKE))
goto process_handshake;
- if (unlikely(conn->flags & CO_FL_WAIT_L4_CONN)) {
- /* still waiting for a connection to establish and no data to
- * send in order to probe it ? Then let's retry the connect().
+ if (unlikely(conn->flags & CO_FL_WAIT_L4_CONN) && !(conn->flags & CO_FL_WAIT_WR)) {
+ /* still waiting for a connection to establish and nothing was
+ * attempted yet to probe the connection. Then let's retry the
+ * connect().
*/
if (!tcp_connect_probe(conn))
goto leave;