diff --git a/src/Nazara/Network/TcpClient.cpp b/src/Nazara/Network/TcpClient.cpp index ab825bb89..745c23fd6 100644 --- a/src/Nazara/Network/TcpClient.cpp +++ b/src/Nazara/Network/TcpClient.cpp @@ -75,7 +75,7 @@ namespace Nz if (m_isLowDelayEnabled != lowDelay) { - SocketImpl::SetBlocking(m_handle, lowDelay, &m_lastError); + SocketImpl::SetNoDelay(m_handle, lowDelay, &m_lastError); m_isLowDelayEnabled = lowDelay; } } @@ -238,7 +238,7 @@ namespace Nz SocketState newState = SocketImpl::Connect(m_handle, m_peerAddress, msTimeout, &m_lastError); NazaraAssert(newState != SocketState_Connecting, "Invalid internal return"); - // Prevent valid peer adddress in non-connected state + // Prevent valid peer address in non-connected state if (newState == SocketState_NotConnected) m_peerAddress = IpAddress::Invalid; diff --git a/src/Nazara/Network/Win32/SocketImpl.cpp b/src/Nazara/Network/Win32/SocketImpl.cpp index 83ffaf55c..ecb9b678b 100644 --- a/src/Nazara/Network/Win32/SocketImpl.cpp +++ b/src/Nazara/Network/Win32/SocketImpl.cpp @@ -534,6 +534,25 @@ namespace Nz return true; } + bool SocketImpl::SetNoDelay(SocketHandle handle, bool nodelay, SocketError* error) + { + NazaraAssert(handle != InvalidHandle, "Invalid handle"); + + BOOL option = nodelay; + if (setsockopt(handle, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast(&option), sizeof(option)) == SOCKET_ERROR) + { + if (error) + *error = TranslateWSAErrorToSocketError(WSAGetLastError()); + + return false; //< Error + } + + if (error) + *error = SocketError_NoError; + + return true; + } + SocketError SocketImpl::TranslateWSAErrorToSocketError(int error) { switch (error) diff --git a/src/Nazara/Network/Win32/SocketImpl.hpp b/src/Nazara/Network/Win32/SocketImpl.hpp index 9eb2c11ff..f1c94e737 100644 --- a/src/Nazara/Network/Win32/SocketImpl.hpp +++ b/src/Nazara/Network/Win32/SocketImpl.hpp @@ -48,6 +48,7 @@ namespace Nz static bool SetBlocking(SocketHandle handle, bool blocking, SocketError* error = nullptr); static bool SetKeepAlive(SocketHandle handle, bool enabled, UInt64 msTime, UInt64 msInterval, SocketError* error = nullptr); + static bool SetNoDelay(SocketHandle handle, bool nodelay, SocketError* error = nullptr); static SocketError TranslateWSAErrorToSocketError(int error); static int TranslateNetProtocolToAF(NetProtocol protocol);