Correctly convert remote port bytecode to uint16 port number. (#321)

* Correctly convert remote port bytecode to uint16 port number.

Copied the network_to_host_short function from the ASIO library to convert the remote port byte code to a uint16 number.

* Switched from uint16_t to unsigned short to work in Windows

* Updated missed uint16_t to unsigned short
This commit is contained in:
Enzo 2021-10-22 19:23:43 +02:00 committed by GitHub
parent 9bbd1f1b30
commit 3f1fc6906c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 2 deletions

View File

@ -278,4 +278,17 @@ namespace ix
#endif
}
// Convert network bytes to host bytes. Copied from the ASIO library
unsigned short network_to_host_short(unsigned short value)
{
#if defined(_WIN32)
unsigned char* value_p = reinterpret_cast<unsigned char*>(&value);
unsigned short result = (static_cast<unsigned short>(value_p[0]) << 8)
| static_cast<unsigned short>(value_p[1]);
return result;
#else // defined(_WIN32)
return ntohs(value);
#endif // defined(_WIN32)
}
} // namespace ix

View File

@ -81,4 +81,6 @@ namespace ix
const char* inet_ntop(int af, const void* src, char* dst, socklen_t size);
int inet_pton(int af, const char* src, void* dst);
unsigned short network_to_host_short(unsigned short value);
} // namespace ix

View File

@ -351,7 +351,7 @@ namespace ix
continue;
}
remotePort = client.sin_port;
remotePort = ix::network_to_host_short(client.sin_port);
remoteIp = remoteIp4;
}
else // AF_INET6
@ -371,7 +371,7 @@ namespace ix
continue;
}
remotePort = client.sin_port;
remotePort = ix::network_to_host_short(client.sin_port);
remoteIp = remoteIp6;
}