fix horrid lag on hb appstore

This commit is contained in:
lizzie
2026-08-31 03:28:37 +00:00
parent f350e4c083
commit 4bb9c903b1
+12 -36
View File
@@ -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);
} }