mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2024-11-04 22:40:05 +00:00
Set monitor connections to non-blocking
Better to just drop monitor connections when the quality is bad than to risk blocking the shard thread.
This commit is contained in:
parent
6b257887b7
commit
53d8cb67ba
@ -214,7 +214,7 @@ void CNSocket::step() {
|
||||
}
|
||||
}
|
||||
|
||||
static bool setSockNonblocking(SOCKET listener, SOCKET newSock) {
|
||||
bool setSockNonblocking(SOCKET listener, SOCKET newSock) {
|
||||
#ifdef _WIN32
|
||||
unsigned long mode = 1;
|
||||
if (ioctlsocket(newSock, FIONBIO, &mode) != 0) {
|
||||
|
@ -117,6 +117,8 @@ inline bool validInVarPacket(size_t base, int32_t npayloads, size_t plsize, size
|
||||
return true;
|
||||
}
|
||||
|
||||
bool setSockNonblocking(SOCKET listener, SOCKET newSock);
|
||||
|
||||
namespace CNSocketEncryption {
|
||||
// you won't believe how complicated they made it in the client :facepalm:
|
||||
static constexpr const char* defaultKey = "m@rQn~W#";
|
||||
|
@ -46,6 +46,16 @@ void Monitor::init() {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
unsigned long mode = 1;
|
||||
if (ioctlsocket(listener, FIONBIO, &mode) != 0) {
|
||||
#else
|
||||
if (fcntl(listener, F_SETFL, (fcntl(listener, F_GETFL, 0) | O_NONBLOCK)) != 0) {
|
||||
#endif
|
||||
std::cerr << "[FATAL] OpenFusion: fcntl failed" << std::endl;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
std::cout << "Monitor listening on *:" << settings::MONITORPORT << std::endl;
|
||||
|
||||
REGISTER_SHARD_TIMER(tick, settings::MONITORINTERVAL);
|
||||
@ -117,6 +127,8 @@ void Monitor::start(void *unused) {
|
||||
if (SOCKETERROR(sock))
|
||||
continue;
|
||||
|
||||
setSockNonblocking(listener, sock);
|
||||
|
||||
std::cout << "[INFO] New monitor connection from " << inet_ntoa(address.sin_addr) << std::endl;
|
||||
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user