mirror of
https://github.com/sogou/workflow.git
synced 2026-10-21 22:56:42 +08:00
fix __bind_any
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user