summaryrefslogtreecommitdiff
path: root/src/socket
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-08-18 19:23:28 -0400
committerAndrew Opalach <andrew@akon.city> 2025-08-18 19:23:28 -0400
commit4aea807a167a894fd264718efc8c9fa8bced7dcb (patch)
treea3951dbd7e395014e2cd2d92812cf8ccb29c42ff /src/socket
parentab75884371a3545f7548498549e2faebbc465ed6 (diff)
downloadlibnaunet-4aea807a167a894fd264718efc8c9fa8bced7dcb.tar.gz
libnaunet-4aea807a167a894fd264718efc8c9fa8bced7dcb.tar.bz2
libnaunet-4aea807a167a894fd264718efc8c9fa8bced7dcb.zip
Add socket option for SO_REUSEADDR
- Enable it by default in multiplex. - Update deps. Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/socket')
-rw-r--r--src/socket/socket.h4
-rw-r--r--src/socket/socket_internal.h1
-rw-r--r--src/socket/socket_linux.c6
-rw-r--r--src/socket/socket_windows.c6
4 files changed, 16 insertions, 1 deletions
diff --git a/src/socket/socket.h b/src/socket/socket.h
index 5f16ec6..e1b203a 100644
--- a/src/socket/socket.h
+++ b/src/socket/socket.h
@@ -20,7 +20,8 @@ enum {
enum {
NNWT_SOCKET_NONBLOCKING = 1,
- NNWT_SOCKET_NODELAY = 1 << 1
+ NNWT_SOCKET_NODELAY = 1 << 1,
+ NNWT_SOCKET_REUSE_ADDR = 1 << 2
};
// @TODO: Guard against EINTR?
@@ -59,6 +60,7 @@ bool nn_socket_init(struct nn_socket *sock, s32 flags);
void nn_socket_set_blocking(struct nn_socket *sock, bool blocking);
void nn_socket_set_nodelay(struct nn_socket *sock, s32 nodelay);
+void nn_socket_set_reuse_addr(struct nn_socket *sock, s32 reuse_addr);
u32 nn_socket_get_send_buf(struct nn_socket *sock);
void nn_socket_set_send_buf(struct nn_socket *sock, u32 sndbuf);
diff --git a/src/socket/socket_internal.h b/src/socket/socket_internal.h
index 41b48ca..7086d39 100644
--- a/src/socket/socket_internal.h
+++ b/src/socket/socket_internal.h
@@ -16,4 +16,5 @@ static inline void nn_socket_apply_flags(struct nn_socket *sock, s32 flags)
{
if (flags & NNWT_SOCKET_NONBLOCKING) nn_socket_set_blocking(sock, false);
if (flags & NNWT_SOCKET_NODELAY) nn_socket_set_nodelay(sock, 1);
+ if (flags & NNWT_SOCKET_REUSE_ADDR) nn_socket_set_reuse_addr(sock, 1);
}
diff --git a/src/socket/socket_linux.c b/src/socket/socket_linux.c
index a631348..d854644 100644
--- a/src/socket/socket_linux.c
+++ b/src/socket/socket_linux.c
@@ -68,6 +68,12 @@ void nn_socket_set_nodelay(struct nn_socket *sock, s32 nodelay)
setsockopt(sock->fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay));
}
+void nn_socket_set_reuse_addr(struct nn_socket *sock, s32 reuse_addr)
+{
+ al_assert(sock->type == NNWT_SOCKET_TCP);
+ setsockopt(sock->fd, SOL_SOCKET, SO_REUSEADDR, &reuse_addr, sizeof(reuse_addr));
+}
+
u32 nn_socket_get_send_buf(struct nn_socket *sock)
{
u32 send_queue_size;
diff --git a/src/socket/socket_windows.c b/src/socket/socket_windows.c
index 370f403..123640e 100644
--- a/src/socket/socket_windows.c
+++ b/src/socket/socket_windows.c
@@ -39,6 +39,12 @@ void nn_socket_set_nodelay(struct nn_socket *sock, s32 nodelay)
(void)nodelay;
}
+void nn_socket_set_reuse_addr(struct nn_socket *sock, s32 reuse_addr)
+{
+ (void)sock;
+ (void)reuse_addr;
+}
+
bool nn_socket_set(struct nn_socket *sock, str *addr, u16 port)
{
(void)sock;