diff --git a/io/dap_events_socket.c b/io/dap_events_socket.c index 7598e9b4f5a81e26b340fb4e772251131603021e..1bb6c32a5d9091adf481133af8a0641830c5cb7b 100644 --- a/io/dap_events_socket.c +++ b/io/dap_events_socket.c @@ -1309,14 +1309,20 @@ void dap_events_socket_set_readable_unsafe_ex(dap_events_socket_t *a_es, bool a_ case DESCRIPTOR_TYPE_SOCKET_LISTENING: case DESCRIPTOR_TYPE_SOCKET_LOCAL_LISTENING: - if ( (a_es->socket2 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET ) + if ( (a_es->socket2 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET ) { log_it(L_ERROR, "Failed to create socket for accept()'ing, errno %d", WSAGetLastError()); - else { - l_err = pfnAcceptEx( a_es->socket, a_es->socket2, (LPVOID)(a_es->buf_in), 0, - sizeof(SOCKADDR_STORAGE) + 16, sizeof(SOCKADDR_STORAGE) + 16, - &bytes, (OVERLAPPED*)ol ) ? ERROR_SUCCESS : WSAGetLastError(); - func = "AcceptEx"; + break; + } + u_long l_option = 1; + if ( setsockopt(a_es->socket2, SOL_SOCKET, SO_REUSEADDR, (const char*)&l_option, sizeof(int)) < 0 ) { + _set_errno( WSAGetLastError() ); + log_it(L_ERROR, "setsockopt(SO_REUSEADDR) on socket %d failed, error %d: \"%s\"", + a_es->socket2, errno, dap_strerror(errno)); } + l_err = pfnAcceptEx( a_es->socket, a_es->socket2, (LPVOID)(a_es->buf_in), 0, + sizeof(SOCKADDR_STORAGE) + 16, sizeof(SOCKADDR_STORAGE) + 16, + &bytes, (OVERLAPPED*)ol ) ? ERROR_SUCCESS : WSAGetLastError(); + func = "AcceptEx"; break; case DESCRIPTOR_TYPE_FILE: