From f8b18cc793a386a6cffa22963740baa05bff908c Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sun, 11 Feb 2018 08:50:29 +0800 Subject: [PATCH] Refine the bind_to_address --- src/netutils.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/netutils.c b/src/netutils.c index edf6f66e..d4254b71 100644 --- a/src/netutils.c +++ b/src/netutils.c @@ -90,10 +90,14 @@ setinterface(int socket_fd, const char *interface_name) int bind_to_address(int socket_fd, const char *host) { - if (host != NULL) { + static struct sockaddr_storage storage = {0}; + if (storage.ss_family == AF_INET) { + return bind(socket_fd, (struct sockaddr *)&storage, sizeof(struct sockaddr_in)); + } + else if (storage.ss_family == AF_INET6) { + return bind(socket_fd, (struct sockaddr *)&storage, sizeof(struct sockaddr_in6)); + } else if (host != NULL) { struct cork_ip ip; - struct sockaddr_storage storage; - memset(&storage, 0, sizeof(struct sockaddr_storage)); if (cork_ip_init(&ip, host) != -1) { if (ip.version == 4) { struct sockaddr_in *addr = (struct sockaddr_in *)&storage;