This commit is contained in:
Federico Cecchetto 2022-02-28 15:07:22 +01:00
parent 0fab0574b2
commit 0eda36b7a1

View File

@ -102,33 +102,35 @@ namespace network
// Rather than try and let the player in, just tell them they are a duplicate player and reject connection // Rather than try and let the player in, just tell them they are a duplicate player and reject connection
game::NET_OutOfBandPrint(game::NS_SERVER, from, "error\nYou are already connected to the server."); game::NET_OutOfBandPrint(game::NS_SERVER, from, "error\nYou are already connected to the server.");
} }
SOCKET create_socket(const char* net_interface, int port, int protocol)
{
sockaddr_in address{};
if (net_interface && net_interface != "localhost"s) SOCKET create_socket(const char* net_interface, int port, int protocol)
{ {
// Sys_StringToSockaddr sockaddr_in address{};
utils::hook::invoke<void>(0x1404F6580, net_interface, &address);
if (net_interface && net_interface != "localhost"s)
{
// Sys_StringToSockaddr
utils::hook::invoke<void>(0x1404F6580, net_interface, &address);
}
address.sin_family = AF_INET;
address.sin_port = ntohs(port);
const auto sock = ::socket(AF_INET, SOCK_DGRAM, protocol);
u_long arg = 1;
ioctlsocket(sock, FIONBIO, &arg);
char optval[4] = { 1 };
setsockopt(sock, 0xFFFF, 32, optval, 4);
if (bind(sock, reinterpret_cast<sockaddr*>(&address), sizeof(address)) != -1)
{
return sock;
}
closesocket(sock);
return 0;
} }
address.sin_family = AF_INET;
address.sin_port = ntohs(port);
const auto sock = ::socket(AF_INET, SOCK_DGRAM, protocol);
u_long arg = 1;
ioctlsocket(sock, FIONBIO, &arg);
char optval[4] = {1};
setsockopt(sock, 0xFFFF, 32, optval, 4);
if (bind(sock, reinterpret_cast<sockaddr*>(&address), sizeof(address)) != -1)
{
return sock;
}
closesocket(sock);
return 0;
} }
void on(const std::string& command, const callback& callback) void on(const std::string& command, const callback& callback)