Respect net_port and prevent game from binding other sockets

This commit is contained in:
Maurice Heumann 2023-03-12 14:56:16 +01:00
parent af613b26dd
commit 5090723010

View File

@ -84,20 +84,20 @@ namespace network
socket_set_blocking(s, false); socket_set_blocking(s, false);
const auto address = htonl(INADDR_ANY); const auto address = htonl(INADDR_ANY);
const auto port = htons(28960); auto port = static_cast<uint16_t>(game::Dvar_FindVar("net_port")->current.integer);
sockaddr_in server_addr{}; sockaddr_in server_addr{};
server_addr.sin_family = AF_INET; server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = address; server_addr.sin_addr.s_addr = address;
server_addr.sin_port = port;
int retries = 0; int retries = 0;
while (bind(s, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) == do
SOCKET_ERROR)
{ {
server_addr.sin_port = htons(port++);
if (++retries > 10) return; if (++retries > 10) return;
server_addr.sin_port = htons(ntohs(server_addr.sin_port) + 1);
} }
while (bind(s, reinterpret_cast<sockaddr*>(&server_addr), sizeof(server_addr)) ==
SOCKET_ERROR);
} }
bool& socket_byte_missing() bool& socket_byte_missing()
@ -155,6 +155,10 @@ namespace network
{ {
return 2; return 2;
} }
int bind_stub(SOCKET /*s*/, const sockaddr* /*addr*/, int /*namelen*/)
{
return 0;
} }
} }
@ -281,6 +285,9 @@ namespace network
// Kill voice chat // Kill voice chat
utils::hook::set<uint32_t>(game::select(0x141359310, 0x14018FE40), 0xC3C03148); utils::hook::set<uint32_t>(game::select(0x141359310, 0x14018FE40), 0xC3C03148);
// Don't let the game bind sockets anymore
utils::hook::set(game::select(0x15AAE9344, 0x14B4BD828), bind_stub);
} }
}; };
} }