From aca5f5ddb46c1555b3fde61f95ccf0d6271ed607 Mon Sep 17 00:00:00 2001 From: tim-le Date: Sun, 20 Nov 2016 17:24:27 +0800 Subject: [PATCH] Fix #966 again (#967) * SO_REUSEADDR for remote sockfd avoid ERROR: bind_to_address: Address already in use * set addr->sin_port to be 0 * Update server.c * Update server.c * Update server.c * Update server.c * Update server.c * Update server.c * Update server.c --- src/server.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/server.c b/src/server.c index 1c002e68..e064b80a 100644 --- a/src/server.c +++ b/src/server.c @@ -519,16 +519,17 @@ connect_to_remote(EV_P_ struct addrinfo *res, #endif setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); - remote_t *remote = new_remote(sockfd); - // setup remote socks if (setnonblocking(sockfd) == -1) ERROR("setnonblocking"); if (bind_address != NULL) - if (bind_to_address(sockfd, bind_address) == -1) - FATAL("unable to bind the specific address"); + if (bind_to_address(sockfd, bind_address) == -1) { + ERROR("bind_to_address"); + close(sockfd); + return NULL; + } #ifdef SET_INTERFACE if (iface) { @@ -537,6 +538,8 @@ connect_to_remote(EV_P_ struct addrinfo *res, } #endif + remote_t *remote = new_remote(sockfd); + #ifdef TCP_FASTOPEN if (fast_open) { #ifdef __APPLE__