diff options
author | Willy Tarreau <w@1wt.eu> | 2020-09-25 19:00:01 +0200 |
---|---|---|
committer | Willy Tarreau <w@1wt.eu> | 2020-10-07 19:34:52 +0200 |
commit | f4eb62954be9c3a3dcb79a94558968065dd96ada (patch) | |
tree | 028864496ce3aecab4e16276f1eeb87848894567 | |
parent | 9b516d2f2ad813c05c6c47eeda49945cf05dd651 (diff) | |
download | haproxy-f4eb62954be9c3a3dcb79a94558968065dd96ada.tar.gz |
MINOR: sock: provide a set of generic enable/disable functions
These will be used on receivers, to enable or disable receiving on a
listener, which most of the time just consists in enabling/disabling
the file descriptor.
We have to take care of the existence of fd_updt to know if we may
or not call fd_{want,stop}_recv() since it's not permitted in very
early boot.
-rw-r--r-- | include/haproxy/sock.h | 2 | ||||
-rw-r--r-- | src/sock.c | 18 |
2 files changed, 20 insertions, 0 deletions
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 <rx> 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 <rx> 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 <fd>, with <dir> indicating * if we're a listener (=0) or an initiator (!=0). It returns 0 in case of |