summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--toxcore/TCP_server.c4
-rw-r--r--toxcore/network.c11
-rw-r--r--toxcore/network.h7
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 */
180int 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 */
335int set_socket_nosigpipe(sock_t sock); 335int 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 */
342int 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