From 07400c56bb0ab81cfd2e295c790b699839fea0a3 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 4 Dec 2020 14:49:11 +0100 Subject: [PATCH] MINOR: listener: automatically set the port when creating listeners In create_listeners() we iterate over a port range and call the protocol's ->add() function to add a new listener on the specified port. Only tcp4/tcp6/udp4/udp6 support a port, the other ones ignore it. Now that we can rely on the address family to properly set the port, better do it this way directly from create_listeners() and remove the family-specific case from the protocol layer. --- src/listener.c | 4 ++++ src/proto_tcp.c | 2 -- src/proto_udp.c | 2 -- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/listener.c b/src/listener.c index c9f0c2de6..a8c5460a9 100644 --- a/src/listener.c +++ b/src/listener.c @@ -614,7 +614,11 @@ int create_listeners(struct bind_conf *bc, const struct sockaddr_storage *ss, l->rx.owner = l; l->rx.iocb = proto->default_iocb; l->rx.fd = fd; + memcpy(&l->rx.addr, ss, sizeof(*ss)); + if (proto->fam.set_port) + proto->fam.set_port(&l->rx.addr, port); + MT_LIST_INIT(&l->wait_queue); listener_set_state(l, LI_INIT); diff --git a/src/proto_tcp.c b/src/proto_tcp.c index e8e6c766c..7c7670a4e 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -725,7 +725,6 @@ static void tcpv4_add_listener(struct listener *listener, int port) return; listener_set_state(listener, LI_ASSIGNED); listener->rx.proto = &proto_tcpv4; - ((struct sockaddr_in *)(&listener->rx.addr))->sin_port = htons(port); LIST_ADDQ(&proto_tcpv4.receivers, &listener->rx.proto_list); proto_tcpv4.nb_receivers++; } @@ -743,7 +742,6 @@ static void tcpv6_add_listener(struct listener *listener, int port) return; listener_set_state(listener, LI_ASSIGNED); listener->rx.proto = &proto_tcpv6; - ((struct sockaddr_in6 *)(&listener->rx.addr))->sin6_port = htons(port); LIST_ADDQ(&proto_tcpv6.receivers, &listener->rx.proto_list); proto_tcpv6.nb_receivers++; } diff --git a/src/proto_udp.c b/src/proto_udp.c index e38ab0d11..436f2a01a 100644 --- a/src/proto_udp.c +++ b/src/proto_udp.c @@ -152,7 +152,6 @@ static void udp4_add_listener(struct listener *listener, int port) return; listener_set_state(listener, LI_ASSIGNED); listener->rx.proto = &proto_udp4; - ((struct sockaddr_in *)(&listener->rx.addr))->sin_port = htons(port); LIST_ADDQ(&proto_udp4.receivers, &listener->rx.proto_list); proto_udp4.nb_receivers++; } @@ -167,7 +166,6 @@ static void udp6_add_listener(struct listener *listener, int port) return; listener_set_state(listener, LI_ASSIGNED); listener->rx.proto = &proto_udp6; - ((struct sockaddr_in6 *)(&listener->rx.addr))->sin6_port = htons(port); LIST_ADDQ(&proto_udp6.receivers, &listener->rx.proto_list); proto_udp6.nb_receivers++; }