if (unlikely(conn->flags & (CO_FL_HANDSHAKE | CO_FL_ERROR)))
goto process_handshake;
- if (unlikely(conn->flags & CO_FL_WAIT_L4_CONN) && fd_send_ready(conn->t.sock.fd)) {
+ if (unlikely(conn->flags & CO_FL_WAIT_L4_CONN)) {
/* still waiting for a connection to establish and nothing was
* attempted yet to probe the connection. Then let's retry the
* connect().
if (!(conn->flags & CO_FL_CTRL_READY))
goto fail;
+ if (!fd_recv_ready(conn->t.sock.fd))
+ return 0;
+
do {
trash.len = recv(conn->t.sock.fd, trash.str, trash.size, MSG_PEEK);
if (trash.len < 0) {
if (!(conn->flags & CO_FL_WAIT_L4_CONN))
return 1; /* strange we were called while ready */
+ if (!fd_send_ready(fd))
+ return 0;
+
/* we might be the first witness of FD_POLL_ERR. Note that FD_POLL_HUP
* without FD_POLL_IN also indicates a hangup without input data meaning
* there was no connection.
int retval = 0;
- if (!(conn->flags & CO_FL_CTRL_READY))
+ if (!conn_ctrl_ready(conn))
+ return 0;
+
+ if (!fd_recv_ready(conn->t.sock.fd))
return 0;
errno = 0;
{
int ret, done;
- if (!(conn->flags & CO_FL_CTRL_READY))
+ if (!conn_ctrl_ready(conn))
+ return 0;
+
+ if (!fd_send_ready(conn->t.sock.fd))
return 0;
done = 0;
int ret, done = 0;
int try;
- if (!(conn->flags & CO_FL_CTRL_READY))
+ if (!conn_ctrl_ready(conn))
+ return 0;
+
+ if (!fd_recv_ready(conn->t.sock.fd))
return 0;
errno = 0;
{
int ret, try, done, send_flag;
- if (!(conn->flags & CO_FL_CTRL_READY))
+ if (!conn_ctrl_ready(conn))
+ return 0;
+
+ if (!fd_send_ready(conn->t.sock.fd))
return 0;
done = 0;
if (!conn_ctrl_ready(conn))
goto out_error;
+ if (!fd_send_ready(conn->t.sock.fd))
+ goto out_wait;
+
/* If we have a PROXY line to send, we'll use this to validate the
* connection, in which case the connection is validated only once
* we've sent the whole proxy line. Otherwise we use connect().