diff options
-rw-r--r-- | toxcore/TCP_server.c | 4 | ||||
-rw-r--r-- | toxcore/network.c | 11 | ||||
-rw-r--r-- | toxcore/network.h | 7 |
3 files changed, 22 insertions, 0 deletions
diff --git a/toxcore/TCP_server.c b/toxcore/TCP_server.c index d7401de8..f07df2c6 100644 --- a/toxcore/TCP_server.c +++ b/toxcore/TCP_server.c | |||
@@ -925,6 +925,10 @@ static sock_t new_listening_TCP_socket(int family, uint16_t port) | |||
925 | ok = set_socket_dualstack(sock); | 925 | ok = set_socket_dualstack(sock); |
926 | } | 926 | } |
927 | 927 | ||
928 | if (ok) { | ||
929 | ok = set_socket_reuseaddr(sock); | ||
930 | } | ||
931 | |||
928 | ok = ok && bind_to_port(sock, family, port) && (listen(sock, TCP_MAX_BACKLOG) == 0); | 932 | ok = ok && bind_to_port(sock, family, port) && (listen(sock, TCP_MAX_BACKLOG) == 0); |
929 | 933 | ||
930 | if (!ok) { | 934 | if (!ok) { |
diff --git a/toxcore/network.c b/toxcore/network.c index d974ddc2..b3df3fbd 100644 --- a/toxcore/network.c +++ b/toxcore/network.c | |||
@@ -172,6 +172,17 @@ int set_socket_nosigpipe(sock_t sock) | |||
172 | #endif | 172 | #endif |
173 | } | 173 | } |
174 | 174 | ||
175 | /* Enable SO_REUSEADDR on socket. | ||
176 | * | ||
177 | * return 1 on success | ||
178 | * return 0 on failure | ||
179 | */ | ||
180 | int set_socket_reuseaddr(sock_t sock) | ||
181 | { | ||
182 | int set = 1; | ||
183 | return (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &set, sizeof(set)) == 0); | ||
184 | } | ||
185 | |||
175 | /* Set socket to dual (IPv4 + IPv6 socket) | 186 | /* Set socket to dual (IPv4 + IPv6 socket) |
176 | * | 187 | * |
177 | * return 1 on success | 188 | * return 1 on success |
diff --git a/toxcore/network.h b/toxcore/network.h index c67f523d..b06c0f6a 100644 --- a/toxcore/network.h +++ b/toxcore/network.h | |||
@@ -334,6 +334,13 @@ int set_socket_nonblock(sock_t sock); | |||
334 | */ | 334 | */ |
335 | int set_socket_nosigpipe(sock_t sock); | 335 | int set_socket_nosigpipe(sock_t sock); |
336 | 336 | ||
337 | /* Enable SO_REUSEADDR on socket. | ||
338 | * | ||
339 | * return 1 on success | ||
340 | * return 0 on failure | ||
341 | */ | ||
342 | int set_socket_reuseaddr(sock_t sock); | ||
343 | |||
337 | /* Set socket to dual (IPv4 + IPv6 socket) | 344 | /* Set socket to dual (IPv4 + IPv6 socket) |
338 | * | 345 | * |
339 | * return 1 on success | 346 | * return 1 on success |