mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-09-03 03:09:13 +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
|
} // Anonymous namespace
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
sockaddr_in TranslateFromSockAddrIn(Network::SockAddrIn input) {
|
sockaddr_in TranslateFromSockAddrIn(Network::SockAddrIn input) {
|
||||||
sockaddr_in result{};
|
sockaddr_in result{};
|
||||||
#ifdef __unix__
|
#ifdef __unix__
|
||||||
result.sin_len = sizeof(result);
|
result.sin_len = sizeof(result);
|
||||||
#endif
|
#endif
|
||||||
result.sin_family = AF_INET;
|
result.sin_family = sa_family_t(TranslateDomainToNative(Domain(input.family)));
|
||||||
switch (Domain(input.family)) {
|
|
||||||
case Domain::INET:
|
|
||||||
result.sin_family = AF_INET;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
UNIMPLEMENTED_MSG("Unhandled sockaddr family={}", input.family);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
result.sin_port = input.portno; //no need to translate
|
result.sin_port = input.portno; //no need to translate
|
||||||
|
#ifdef _WIN32
|
||||||
auto& ip = result.sin_addr.S_un.S_un_b;
|
auto& ip = result.sin_addr.S_un.S_un_b;
|
||||||
ip.s_b1 = input.ip[0];
|
ip.s_b1 = input.ip[0];
|
||||||
ip.s_b2 = input.ip[1];
|
ip.s_b2 = input.ip[1];
|
||||||
ip.s_b3 = input.ip[2];
|
ip.s_b3 = input.ip[2];
|
||||||
ip.s_b4 = input.ip[3];
|
ip.s_b4 = input.ip[3];
|
||||||
return result;
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
sockaddr_in TranslateFromSockAddrIn(Network::SockAddrIn input) {
|
result.sin_addr.s_addr = std::bit_cast<in_addr_t>(input.ip);
|
||||||
sockaddr_in result{};
|
#endif
|
||||||
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));
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
Network::SockAddrIn TranslateToSockAddrIn(sockaddr_in input) {
|
Network::SockAddrIn TranslateToSockAddrIn(sockaddr_in input) {
|
||||||
Network::SockAddrIn result{};
|
Network::SockAddrIn result{};
|
||||||
result.len = 16;
|
result.len = 16;
|
||||||
result.family = u8(TranslateDomainFromNative(input.sin_family));
|
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.ip = TranslateIPv4(input.sin_addr);
|
||||||
result.zeroes = {};
|
result.zeroes = {};
|
||||||
return result;
|
return result;
|
||||||
@@ -1127,14 +1107,9 @@ std::pair<Socket::AcceptResult, Errno> Socket::Accept() {
|
|||||||
|
|
||||||
Errno Socket::Connect(Network::SockAddrIn addr_in) {
|
Errno Socket::Connect(Network::SockAddrIn addr_in) {
|
||||||
auto const host_addr_in = TranslateFromSockAddrIn(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);
|
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 (EnableNonBlock(fd, false)) {
|
if (connect(fd, reinterpret_cast<sockaddr const*>(&host_addr_in), sizeof(host_addr_in)) != SOCKET_ERROR)
|
||||||
if (connect(fd, reinterpret_cast<sockaddr const*>(&host_addr_in), sizeof(host_addr_in)) != SOCKET_ERROR) {
|
return Errno::E_SUCCESS;
|
||||||
if (EnableNonBlock(fd, true)) {
|
|
||||||
return Errno::E_SUCCESS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return GetAndLogLastError(CallType::Other);
|
return GetAndLogLastError(CallType::Other);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1156,9 +1131,10 @@ std::pair<Network::SockAddrIn, Errno> Socket::GetSockName() {
|
|||||||
return {TranslateToSockAddrIn(addr), Errno::E_SUCCESS};
|
return {TranslateToSockAddrIn(addr), Errno::E_SUCCESS};
|
||||||
}
|
}
|
||||||
|
|
||||||
Errno Socket::Bind(Network::SockAddrIn addr) {
|
Errno Socket::Bind(Network::SockAddrIn addr_in) {
|
||||||
auto const addr_in = TranslateFromSockAddrIn(addr);
|
auto const host_addr_in = TranslateFromSockAddrIn(addr_in);
|
||||||
if (bind(fd, reinterpret_cast<sockaddr const*>(&addr_in), sizeof(addr_in)) != SOCKET_ERROR)
|
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 Errno::E_SUCCESS;
|
||||||
return GetAndLogLastError(CallType::Other);
|
return GetAndLogLastError(CallType::Other);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user