From: pcarana Date: Thu, 16 Jan 2020 21:34:03 +0000 (-0600) Subject: Use SO_REUSEPORT at sockopts so that the RTR port can be reused X-Git-Tag: v1.2.0~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6401a4739ac512985158e63499e037dc2f2078db;p=thirdparty%2FFORT-validator.git Use SO_REUSEPORT at sockopts so that the RTR port can be reused --- diff --git a/src/rtr/rtr.c b/src/rtr/rtr.c index 740a45f0..8da7c0a4 100644 --- a/src/rtr/rtr.c +++ b/src/rtr/rtr.c @@ -86,12 +86,12 @@ create_server_socket(int *result) struct addrinfo *addrs; struct addrinfo *addr; unsigned long port; - int reusaddr; + int reuse; int fd; /* "file descriptor" */ int error; *result = 0; /* Shuts up gcc */ - reusaddr = 1; + reuse = 1; error = init_addrinfo(&addrs); if (error) @@ -110,12 +110,19 @@ create_server_socket(int *result) } /* enable SO_REUSEADDR */ - if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reusaddr, + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(int)) < 0) { pr_errno(errno, "setsockopt(SO_REUSEADDR) failed"); continue; } + /* enable SO_REUSEPORT */ + if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &reuse, + sizeof(int)) < 0) { + pr_errno(errno, "setsockopt(SO_REUSEPORT) failed"); + continue; + } + if (bind(fd, addr->ai_addr, addr->ai_addrlen) < 0) { pr_errno(errno, "bind() failed"); continue;