mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-08-31 18:46:08 +00:00
fix horrid lag on hb appstore
This commit is contained in:
@@ -751,50 +751,30 @@ static Network::PollEvents TranslatePollRevents(s16 revents) {
|
||||
|
||||
} // Anonymous namespace
|
||||
|
||||
#ifdef _WIN32
|
||||
sockaddr_in TranslateFromSockAddrIn(Network::SockAddrIn input) {
|
||||
sockaddr_in result{};
|
||||
#ifdef __unix__
|
||||
result.sin_len = sizeof(result);
|
||||
#endif
|
||||
result.sin_family = AF_INET;
|
||||
switch (Domain(input.family)) {
|
||||
case Domain::INET:
|
||||
result.sin_family = AF_INET;
|
||||
break;
|
||||
default:
|
||||
UNIMPLEMENTED_MSG("Unhandled sockaddr family={}", input.family);
|
||||
break;
|
||||
}
|
||||
|
||||
result.sin_family = sa_family_t(TranslateDomainToNative(Domain(input.family)));
|
||||
result.sin_port = input.portno; //no need to translate
|
||||
|
||||
#ifdef _WIN32
|
||||
auto& ip = result.sin_addr.S_un.S_un_b;
|
||||
ip.s_b1 = input.ip[0];
|
||||
ip.s_b2 = input.ip[1];
|
||||
ip.s_b3 = input.ip[2];
|
||||
ip.s_b4 = input.ip[3];
|
||||
return result;
|
||||
}
|
||||
#else
|
||||
sockaddr_in TranslateFromSockAddrIn(Network::SockAddrIn input) {
|
||||
sockaddr_in result{};
|
||||
result.sin_family = sa_family_t(TranslateDomainToNative(Domain(input.family)));
|
||||
//result.sin_len = sizeof(result);
|
||||
result.sin_port = input.portno; //needs no conversion
|
||||
result.sin_addr.s_addr = htonl((u32(input.ip[0]) << 24)
|
||||
| (u32(input.ip[1]) << 16)
|
||||
| (u32(input.ip[2]) << 8)
|
||||
| (u32(input.ip[3]) << 0));
|
||||
result.sin_addr.s_addr = std::bit_cast<in_addr_t>(input.ip);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
Network::SockAddrIn TranslateToSockAddrIn(sockaddr_in input) {
|
||||
Network::SockAddrIn result{};
|
||||
result.len = 16;
|
||||
result.family = u8(TranslateDomainFromNative(input.sin_family));
|
||||
result.portno = input.sin_port; //needs no conversion
|
||||
result.portno = ntohs(input.sin_port); //needs no conversion
|
||||
result.ip = TranslateIPv4(input.sin_addr);
|
||||
result.zeroes = {};
|
||||
return result;
|
||||
@@ -1127,14 +1107,9 @@ std::pair<Socket::AcceptResult, Errno> Socket::Accept() {
|
||||
|
||||
Errno Socket::Connect(Network::SockAddrIn addr_in) {
|
||||
auto const host_addr_in = TranslateFromSockAddrIn(addr_in);
|
||||
LOG_INFO(Network, "len={}, family={} - {}.{}.{}.{}:{}", addr_in.len, addr_in.family, addr_in.ip[0], addr_in.ip[1], addr_in.ip[2], addr_in.ip[3], addr_in.portno);
|
||||
if (EnableNonBlock(fd, false)) {
|
||||
if (connect(fd, reinterpret_cast<sockaddr const*>(&host_addr_in), sizeof(host_addr_in)) != SOCKET_ERROR) {
|
||||
if (EnableNonBlock(fd, true)) {
|
||||
return Errno::E_SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
LOG_INFO(Network, "len={}, family={} - {}.{}.{}.{}:{}", addr_in.len, addr_in.family, addr_in.ip[0], addr_in.ip[1], addr_in.ip[2], addr_in.ip[3], ntohs(addr_in.portno));
|
||||
if (connect(fd, reinterpret_cast<sockaddr const*>(&host_addr_in), sizeof(host_addr_in)) != SOCKET_ERROR)
|
||||
return Errno::E_SUCCESS;
|
||||
return GetAndLogLastError(CallType::Other);
|
||||
}
|
||||
|
||||
@@ -1156,9 +1131,10 @@ std::pair<Network::SockAddrIn, Errno> Socket::GetSockName() {
|
||||
return {TranslateToSockAddrIn(addr), Errno::E_SUCCESS};
|
||||
}
|
||||
|
||||
Errno Socket::Bind(Network::SockAddrIn addr) {
|
||||
auto const addr_in = TranslateFromSockAddrIn(addr);
|
||||
if (bind(fd, reinterpret_cast<sockaddr const*>(&addr_in), sizeof(addr_in)) != SOCKET_ERROR)
|
||||
Errno Socket::Bind(Network::SockAddrIn addr_in) {
|
||||
auto const host_addr_in = TranslateFromSockAddrIn(addr_in);
|
||||
LOG_INFO(Network, "len={}, family={} - {}.{}.{}.{}:{}", addr_in.len, addr_in.family, addr_in.ip[0], addr_in.ip[1], addr_in.ip[2], addr_in.ip[3], ntohs(addr_in.portno));
|
||||
if (bind(fd, reinterpret_cast<sockaddr const*>(&host_addr_in), sizeof(host_addr_in)) != SOCKET_ERROR)
|
||||
return Errno::E_SUCCESS;
|
||||
return GetAndLogLastError(CallType::Other);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user