diff --git a/src/network/core/address.cpp b/src/network/core/address.cpp index 0498c793fb..aa18418f9d 100644 --- a/src/network/core/address.cpp +++ b/src/network/core/address.cpp @@ -27,9 +27,13 @@ const char *NetworkAddress::GetHostname() uint16 NetworkAddress::GetPort() const { switch (this->address.ss_family) { + case AF_UNSPEC: case AF_INET: return ntohs(((struct sockaddr_in *)&this->address)->sin_port); + case AF_INET6: + return ntohs(((struct sockaddr_in6 *)&this->address)->sin6_port); + default: NOT_REACHED(); } @@ -38,10 +42,15 @@ uint16 NetworkAddress::GetPort() const void NetworkAddress::SetPort(uint16 port) { switch (this->address.ss_family) { + case AF_UNSPEC: case AF_INET: ((struct sockaddr_in*)&this->address)->sin_port = htons(port); break; + case AF_INET6: + ((struct sockaddr_in6*)&this->address)->sin6_port = htons(port); + break; + default: NOT_REACHED(); } diff --git a/src/network/core/address.h b/src/network/core/address.h index 9515de9761..2b5f7444f8 100644 --- a/src/network/core/address.h +++ b/src/network/core/address.h @@ -79,13 +79,14 @@ public: * Create a network address based on a unresolved host and port * @param ip the unresolved hostname * @param port the port + * @param family the address family */ - NetworkAddress(const char *hostname = "0.0.0.0", uint16 port = 0) : + NetworkAddress(const char *hostname = "0.0.0.0", uint16 port = 0, int family = AF_INET) : hostname(strdup(hostname)), address_length(0) { memset(&this->address, 0, sizeof(this->address)); - this->address.ss_family = AF_INET; + this->address.ss_family = family; this->SetPort(port); } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 9a82154b4c..ea33691b24 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -471,7 +471,7 @@ void ClientNetworkContentSocketHandler::Connect() if (this->sock != INVALID_SOCKET || this->isConnecting) return; this->isConnecting = true; - new NetworkContentConnecter(NetworkAddress(NETWORK_CONTENT_SERVER_HOST, NETWORK_CONTENT_SERVER_PORT)); + new NetworkContentConnecter(NetworkAddress(NETWORK_CONTENT_SERVER_HOST, NETWORK_CONTENT_SERVER_PORT, AF_UNSPEC)); } /**