diff options
Diffstat (limited to 'src/socket')
| -rw-r--r-- | src/socket/socket.h | 4 | ||||
| -rw-r--r-- | src/socket/socket_linux.c | 11 | ||||
| -rw-r--r-- | src/socket/socket_windows.c | 5 |
3 files changed, 19 insertions, 1 deletions
diff --git a/src/socket/socket.h b/src/socket/socket.h index 3872bd4..fde26f4 100644 --- a/src/socket/socket.h +++ b/src/socket/socket.h @@ -25,7 +25,7 @@ enum { }; // @TODO: Guard against EINTR? -// https://github.com/kovidgoyal/kitty/blob/master/kitty/safe-wrappers.h +// https://github.com/kovidgoyal/kitty/blob/master/kitty/safe-wrappers.h struct nn_socket { u8 type; @@ -37,6 +37,7 @@ struct nn_socket { s32 fd; struct addrinfo *addrinfo; struct sockaddr_un addr_un; + u32 acceptconn; #endif }; @@ -84,3 +85,4 @@ bool nn_socket_check_error(ssize_t ret); void nn_socket_shutdown(struct nn_socket *sock); void nn_socket_close(struct nn_socket *sock); +void nn_socket_cleanup(struct nn_socket *sock); diff --git a/src/socket/socket_linux.c b/src/socket/socket_linux.c index 6a97556..e6947c3 100644 --- a/src/socket/socket_linux.c +++ b/src/socket/socket_linux.c @@ -185,6 +185,10 @@ bool nn_socket_listen(struct nn_socket *sock) return false; } + socklen_t optlen = sizeof(sock->acceptconn); + getsockopt(sock->fd, SOL_SOCKET, SO_ACCEPTCONN, &sock->acceptconn, &optlen); + al_assert(sock->acceptconn); + log_debug("Listening."); return true; @@ -305,3 +309,10 @@ void nn_socket_close(struct nn_socket *sock) sock->addrinfo = NULL; } } + +void nn_socket_cleanup(struct nn_socket *sock) +{ + if (sock->type == NNWT_SOCKET_UNIX && sock->acceptconn) { + unlink(sock->addr_un.sun_path); + } +} diff --git a/src/socket/socket_windows.c b/src/socket/socket_windows.c index 3cf316f..9baa312 100644 --- a/src/socket/socket_windows.c +++ b/src/socket/socket_windows.c @@ -174,3 +174,8 @@ void nn_socket_close(struct nn_socket *sock) // Based on these docs, I assume calling closesocket() is not necessary. //closesocket(sock->fd); } + +void nn_socket_cleanup(struct nn_socket *sock) +{ + (void)sock; +} |