diff --git a/src/relay/relay.cxx b/src/relay/relay.cxx index bf752a4..aa20388 100644 --- a/src/relay/relay.cxx +++ b/src/relay/relay.cxx @@ -28,7 +28,7 @@ bool relay::init() return false; } - const int32_t wantedBufferSize = 0x20000; + const int32_t wantedBufferSize = 0x20000; // same value as in unreal server int32_t actualBufferSize{}; if (!m_socket->setSendBufferSize(wantedBufferSize, actualBufferSize)) @@ -65,15 +65,15 @@ bool relay::run() continue; std::shared_ptr recvAddr = udpsocketFactory::createInternetAddr(); - auto bytesRead = m_socket->recvFrom(buffer.data(), buffer.size(), recvAddr.get()); + const int32_t bytesRead = m_socket->recvFrom(buffer.data(), buffer.size(), recvAddr.get()); if (bytesRead > 0) { const auto findRes = m_addressMappedChannels.find(recvAddr); - // if has a channel mapped to the address as well as two peers, relay + // if recvAddr has a channel mapped to it, as well as two valid peers, relay packet to the other peer if (findRes != m_addressMappedChannels.end() && findRes->second.m_peerA && findRes->second.m_peerB) { - const auto sendAddr = *findRes->second.m_peerA != *recvAddr ? findRes->second.m_peerA : findRes->second.m_peerB; - auto bytesSent = m_socket->sendTo(buffer.data(), bytesRead, sendAddr.get()); + const auto& sendAddr = *findRes->second.m_peerA != *recvAddr ? findRes->second.m_peerA : findRes->second.m_peerB; + int32_t bytesSent = m_socket->sendTo(buffer.data(), bytesRead, sendAddr.get()); if (bytesSent == -1) { diff --git a/src/socket/unix/udpsocketUnix.cxx b/src/socket/unix/udpsocketUnix.cxx index b7a7c92..550a3e6 100644 --- a/src/socket/unix/udpsocketUnix.cxx +++ b/src/socket/unix/udpsocketUnix.cxx @@ -8,8 +8,8 @@ #include #include #include -#include #include +#include udpsocketUnix::udpsocketUnix() { @@ -94,8 +94,12 @@ bool udpsocketUnix::waitForRead(int32_t timeoutms) fdset.events = POLLIN; fdset.revents = 0; - int res = ::poll(&fdset, 1, (int)timeoutms); - return res >= 0 ? fdset.revents & fdset.events : false; + const int res = ::poll(&fdset, 1, (int)timeoutms); + + if (res < 0) [[unlikely]] + return false; + + return fdset.revents & fdset.events; } bool udpsocketUnix::waitForWrite(int32_t timeoutms) @@ -106,7 +110,11 @@ bool udpsocketUnix::waitForWrite(int32_t timeoutms) fdset.revents = 0; int res = ::poll(&fdset, 1, (int)timeoutms); - return res >= 0 ? fdset.revents & fdset.events : false; + + if (res < 0) [[unlikely]] + return false; + + return fdset.revents & fdset.events; } bool udpsocketUnix::isValid()