Skip to content

Commit

Permalink
Enable SO_REUSE{ADDR,PORT} for TCP/IP server sockets (#460)
Browse files Browse the repository at this point in the history
Otherwise `renderd` processes configured to use TCP/IP server sockets may need to wait until the address and/or port are released before restarting under certain circumstances (especially an ungraceful termination).
  • Loading branch information
hummeltech authored Jul 11, 2024
1 parent aa53e60 commit 03f335f
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/renderd.c
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,8 @@ int server_socket_init(renderd_config *sConfig)
int fd;

if (sConfig->ipport > 0) {
const int enable = 1;

g_logger(G_LOG_LEVEL_INFO, "Initialising TCP/IP server socket on %s:%i",
sConfig->iphostname, sConfig->ipport);
fd = socket(PF_INET6, SOCK_STREAM, 0);
Expand All @@ -503,6 +505,18 @@ int server_socket_init(renderd_config *sConfig)
exit(2);
}

if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(enable)) < 0) {
g_logger(G_LOG_LEVEL_CRITICAL, "setsockopt SO_REUSEADDR failed for: %s:%i",
sConfig->iphostname, sConfig->ipport);
exit(3);
}

if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &enable, sizeof(enable)) < 0) {
g_logger(G_LOG_LEVEL_CRITICAL, "setsockopt SO_REUSEPORT failed for: %s:%i",
sConfig->iphostname, sConfig->ipport);
exit(3);
}

bzero(&addrI, sizeof(addrI));
addrI.sin6_family = AF_INET6;
addrI.sin6_addr = in6addr_any;
Expand Down

0 comments on commit 03f335f

Please sign in to comment.