From f589076e26aa831e3e7effed243860debd6f7f6a Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 27 Feb 2016 18:37:55 -0800 Subject: Do the SO_REUSEADDR thing when binding socket. * socket.c (sock_bind): Set the SO_REUSEADDR option before binding the socket, to thwart the EADDRINUSE nuisance. --- socket.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/socket.c b/socket.c index 6a637edf..b0c90465 100644 --- a/socket.c +++ b/socket.c @@ -237,14 +237,17 @@ static void sockaddr_in(val sockaddr, val family, static val sock_bind(val sock, val sockaddr) { - val sfd = stream_fd(sock); + int sfd = c_num(stream_fd(sock)); val family = sock_family(sock); struct sockaddr_storage sa; socklen_t salen; + int reuse = 1; + + (void) setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)); sockaddr_in(sockaddr, family, &sa, &salen); - if (bind(c_num(sfd), coerce(struct sockaddr *, &sa), salen) != 0) + if (bind(sfd, coerce(struct sockaddr *, &sa), salen) != 0) uw_throwf(socket_error_s, lit("bind failed: ~d/~s"), num(errno), string_utf8(strerror(errno)), nao); -- cgit v1.2.3