fix __bind_any

This commit is contained in:
XieHan
2021-04-12 19:56:21 +08:00
parent a37166e0db
commit 01e02e587d
+20 -13
View File
@@ -104,21 +104,28 @@ static int __bind_and_listen(SOCKET listen_sockfd, const struct sockaddr *addr,
static int __bind_any(SOCKET sockfd, int sa_family)
{
struct sockaddr_storage addr;
socklen_t addrlen;
memset(&addr, 0, sizeof (addr));
if (sa_family == AF_INET) {
(*(struct sockaddr_in*)&addr).sin_family = AF_INET;
(*(struct sockaddr_in*)&addr).sin_addr.s_addr = INADDR_ANY;
(*(struct sockaddr_in*)&addr).sin_port = 0;
}
else{
(*(struct sockaddr_in6*)&addr).sin6_family = AF_INET6;
(*(struct sockaddr_in6*)&addr).sin6_addr = in6addr_any;
(*(struct sockaddr_in6*)&addr).sin6_port = 0;
memset(&addr, 0, sizeof (struct sockaddr_storage));
addr.ss_family = sa_family;
if (sa_family == AF_INET)
{
struct sockaddr_in *sin = (struct sockaddr_in *)&addr;
sin->sin_addr.s_addr = INADDR_ANY;
sin->sin_port = 0;
addrlen = sizeof (struct sockaddr_in);
}
if (bind(sockfd, (const struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR)
else if (sa_family == AF_INET6)
{
struct sockaddr_in6 sin6 = (struct sockaddr_in6 *)&addr;
sin6->sin6_addr = in6addr_any;
sin6->sin6_port = 0;
addrlen = sizeof (struct sockaddr_in6);
}
else
addrlen = sizeof (struct sockaddr_storage);
if (bind(sockfd, (struct sockaddr *)&addr, addrlen) == SOCKET_ERROR)
return -1;
return 0;