BUG/MEDIUM: stream: Make sure polling is right on retry.

When retrying to connect to a server, because the previous connection failed,
make sure if we subscribed to the previous connection, the polling flags will
be true for the new fd.

No backport is needed.
diff --git a/src/backend.c b/src/backend.c
index b154b80..cbeadff 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -1061,12 +1061,16 @@
 	struct server *srv;
 	int reuse = 0;
 	int err;
+	void *send_wait = NULL, *recv_wait = NULL;
 
 	srv = objt_server(s->target);
 	srv_cs = objt_cs(s->si[1].end);
 	srv_conn = cs_conn(srv_cs);
-	if (srv_conn)
+	if (srv_conn) {
 		reuse = s->target == srv_conn->target;
+		send_wait = srv_conn->send_wait;
+		recv_wait = srv_conn->recv_wait;
+	}
 
 	if (srv && !reuse) {
 		old_cs = srv_cs;
@@ -1163,6 +1167,8 @@
 		LIST_DEL(&srv_conn->list);
 		LIST_INIT(&srv_conn->list);
 	}
+	srv_conn->send_wait = send_wait;
+	srv_conn->recv_wait = recv_wait;
 
 	if (!srv_cs)
 		return SF_ERR_RESOURCE;
diff --git a/src/stream.c b/src/stream.c
index 42a6c48..7444115 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -883,11 +883,22 @@
 		srv = objt_server(s->target);
 
 		if (conn_err == SF_ERR_NONE) {
+			struct connection *conn;
+
+			conn = cs_conn(objt_cs(si->end));
 			/* state = SI_ST_CON or SI_ST_EST now */
 			if (srv)
 				srv_inc_sess_ctr(srv);
 			if (srv)
 				srv_set_sess_last(srv);
+			/* If we're retrying to connect to the server, and
+			 * somebody subscribed to recv or send events, we have
+			 * to make sure the polling is active on the new fd.
+			 */
+			if (conn->send_wait)
+				conn_xprt_want_send(conn);
+			if (conn->recv_wait)
+				conn_xprt_want_recv(conn);
 			return;
 		}