1
0
mirror of synced 2025-04-23 09:45:32 +03:00

Merge pull request #70 from sgraham/ipv6-getsockname

Handle port==0 when socket is bound on ipv6
This commit is contained in:
yhirose 2018-05-29 17:37:38 -04:00 committed by GitHub
commit a7f47091bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1626,12 +1626,18 @@ inline int Server::bind_internal(const char* host, int port, int socket_flags)
} }
if (port == 0) { if (port == 0) {
struct sockaddr_in sin; struct sockaddr_storage address;
socklen_t len = sizeof(sin); socklen_t len = sizeof(address);
if (getsockname(svr_sock_, reinterpret_cast<struct sockaddr *>(&sin), &len) == -1) { if (getsockname(svr_sock_, reinterpret_cast<struct sockaddr *>(&address), &len) == -1) {
return -1; return -1;
} }
return ntohs(sin.sin_port); if (address.ss_family == AF_INET) {
return ntohs(reinterpret_cast<struct sockaddr_in*>(&address)->sin_port);
} else if (address.ss_family == AF_INET6) {
return ntohs(reinterpret_cast<struct sockaddr_in6*>(&address)->sin6_port);
} else {
return -1;
}
} else { } else {
return port; return port;
} }