diff --git a/include/haproxy/sock.h b/include/haproxy/sock.h index 90dbc07ca..700023292 100644 --- a/include/haproxy/sock.h +++ b/include/haproxy/sock.h @@ -33,6 +33,8 @@ extern struct xfer_sock_list *xfer_sock_list; int sock_create_server_socket(struct connection *conn); +void sock_enable(struct receiver *rx); +void sock_disable(struct receiver *rx); int sock_get_src(int fd, struct sockaddr *sa, socklen_t salen, int dir); int sock_get_dst(int fd, struct sockaddr *sa, socklen_t salen, int dir); int sock_get_old_sockets(const char *unixsocket); diff --git a/src/sock.c b/src/sock.c index 3e414a8b9..c06a28149 100644 --- a/src/sock.c +++ b/src/sock.c @@ -55,6 +55,24 @@ int sock_create_server_socket(struct connection *conn) return my_socketat(ns, conn->dst->ss_family, SOCK_STREAM, 0); } +/* Enables receiving on receiver once already bound. Does nothing in early + * boot (needs fd_updt). + */ +void sock_enable(struct receiver *rx) +{ + if (rx->flags & RX_F_BOUND && fd_updt) + fd_want_recv(rx->fd); +} + +/* Disables receiving on receiver once already bound. Does nothing in early + * boot (needs fd_updt). + */ +void sock_disable(struct receiver *rx) +{ + if (rx->flags & RX_F_BOUND && fd_updt) + fd_stop_recv(rx->fd); +} + /* * Retrieves the source address for the socket , with indicating * if we're a listener (=0) or an initiator (!=0). It returns 0 in case of