From ad17d91b425517c3060a0ed0bfa6131a466d1f5f Mon Sep 17 00:00:00 2001 From: tim-le Date: Fri, 15 Jul 2016 07:08:10 +0800 Subject: [PATCH] fix bugs with when ss-server bind_address enabled (#725) * SO_REUSEADDR for remote sockfd avoid ERROR: bind_to_address: Address already in use * set addr->sin_port to be 0 --- src/netutils.c | 1 + src/server.c | 1 + 2 files changed, 2 insertions(+) diff --git a/src/netutils.c b/src/netutils.c index 7d5102f3..58dbae6b 100644 --- a/src/netutils.c +++ b/src/netutils.c @@ -91,6 +91,7 @@ int bind_to_address(int socket_fd, const char *host) if (host != NULL) { struct cork_ip ip; struct sockaddr_storage storage; + memset(&storage, 0, sizeof(storage)); if (cork_ip_init(&ip, host) != -1) { if (ip.version == 4) { struct sockaddr_in *addr = (struct sockaddr_in *)&storage; diff --git a/src/server.c b/src/server.c index e1a0eefe..5427b1ea 100644 --- a/src/server.c +++ b/src/server.c @@ -415,6 +415,7 @@ static remote_t *connect_to_remote(struct addrinfo *res, #ifdef SO_NOSIGPIPE setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt)); #endif + setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); remote_t *remote = new_remote(sockfd);