summaryrefslogtreecommitdiff
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
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>
-rw-r--r--src/multiplex.c4
-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
-rw-r--r--subprojects/jansson.wrap4
-rw-r--r--subprojects/libalabaster.wrap3
-rw-r--r--subprojects/libcurl.wrap4
8 files changed, 25 insertions, 7 deletions
diff --git a/src/multiplex.c b/src/multiplex.c
index efce31c..4378884 100644
--- a/src/multiplex.c
+++ b/src/multiplex.c
@@ -7,7 +7,9 @@ bool nn_multiplex_socket_init(struct nn_multiplex_socket *multi, u8 type,
bool (*connection_callback)(void *, u8, struct nn_packet_stream *), void *userdata)
{
multi->sock.type = type;
- if (!nn_socket_init(&multi->sock, NNWT_SOCKET_NONBLOCKING)) {
+ s32 flags = NNWT_SOCKET_NONBLOCKING;
+ if (type == NNWT_SOCKET_TCP) flags |= NNWT_SOCKET_REUSE_ADDR;
+ if (!nn_socket_init(&multi->sock, flags)) {
return false;
}
multi->connection_callback = connection_callback;
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;
diff --git a/subprojects/jansson.wrap b/subprojects/jansson.wrap
index 3a2faa6..7fb9637 100644
--- a/subprojects/jansson.wrap
+++ b/subprojects/jansson.wrap
@@ -1,6 +1,6 @@
[wrap-git]
-directory = jansson-96d160d
+directory = jansson-154f891
url = https://github.com/akheron/jansson.git
-revision = 96d160df90016066d04d493d1d69639474ba4f20
+revision = 154f8919fb0d3778282b797789ad985e3d99fdc8
depth = 1
method = cmake
diff --git a/subprojects/libalabaster.wrap b/subprojects/libalabaster.wrap
index 0dc9d62..c992439 100644
--- a/subprojects/libalabaster.wrap
+++ b/subprojects/libalabaster.wrap
@@ -1,4 +1,5 @@
[wrap-git]
-url = https://git.akon.city/libalabaster
+directory = libalabaster-492f4a3
+url = https://git.akon.city/libalabaster.git
revision = 492f4a38f7b7f32727ab678f333eff840d968d74
depth = 1
diff --git a/subprojects/libcurl.wrap b/subprojects/libcurl.wrap
index 6253f43..211ecd7 100644
--- a/subprojects/libcurl.wrap
+++ b/subprojects/libcurl.wrap
@@ -1,6 +1,6 @@
[wrap-git]
-directory = libcurl-8.13.0
+directory = libcurl-8.15.0
url = https://github.com/curl/curl.git
-revision = curl-8_13_0
+revision = curl-8_15_0
depth = 1
method = cmake