diff --git a/adsbus/incoming.c b/adsbus/incoming.c index 70e4a89..934d3b1 100644 --- a/adsbus/incoming.c +++ b/adsbus/incoming.c @@ -110,8 +110,7 @@ static void incoming_listen(struct incoming *incoming) { incoming->peer.fd = socket(addr->ai_family, addr->ai_socktype | SOCK_CLOEXEC, addr->ai_protocol); assert(incoming->peer.fd >= 0); - int optval = 1; - setsockopt(incoming->peer.fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)); + socket_pre_bind_init(incoming->peer.fd); if (bind(incoming->peer.fd, addr->ai_addr, addr->ai_addrlen) != 0) { fprintf(stderr, "I %s: Failed to bind to %s/%s: %s\n", incoming->id, hbuf, sbuf, strerror(errno)); diff --git a/adsbus/socket.c b/adsbus/socket.c index 19e3ce1..89bd56d 100644 --- a/adsbus/socket.c +++ b/adsbus/socket.c @@ -7,6 +7,11 @@ #include "socket.h" +void socket_pre_bind_init(int fd) { + int optval = 1; + assert(!setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval))); +} + void socket_bound_init(int fd) { int qlen = 5; assert(!setsockopt(fd, SOL_TCP, TCP_FASTOPEN, &qlen, sizeof(qlen))); diff --git a/adsbus/socket.h b/adsbus/socket.h index a7e6e27..12de4af 100644 --- a/adsbus/socket.h +++ b/adsbus/socket.h @@ -1,4 +1,5 @@ #pragma once +void socket_pre_bind_init(int); void socket_bound_init(int); void socket_connected_init(int);