diff options
| -rw-r--r-- | src/multiplex.c | 4 | ||||
| -rw-r--r-- | src/socket/socket.h | 4 | ||||
| -rw-r--r-- | src/socket/socket_internal.h | 1 | ||||
| -rw-r--r-- | src/socket/socket_linux.c | 6 | ||||
| -rw-r--r-- | src/socket/socket_windows.c | 6 | ||||
| -rw-r--r-- | subprojects/jansson.wrap | 4 | ||||
| -rw-r--r-- | subprojects/libalabaster.wrap | 3 | ||||
| -rw-r--r-- | subprojects/libcurl.wrap | 4 |
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 |