Network/TcpClient: Allow configuration before connection

Former-commit-id: 65c81f994ae5b9e9cce0132e2a86b1918879b24f
This commit is contained in:
Lynix 2015-11-13 14:01:18 +01:00
parent 8935aa895d
commit 5325513bd8
3 changed files with 22 additions and 14 deletions

View File

@ -8,7 +8,11 @@
namespace Nz
{
inline TcpClient::TcpClient() :
AbstractSocket(SocketType_TCP)
AbstractSocket(SocketType_TCP),
m_keepAliveInterval(1000), //TODO: Query OS default value
m_keepAliveTime(7'200'000), //TODO: Query OS default value
m_isKeepAliveEnabled(false), //TODO: Query OS default value
m_isLowDelayEnabled(false) //TODO: Query OS default value
{
}

View File

@ -76,9 +76,9 @@ namespace Nz
void AbstractSocket::OnOpened()
{
SocketError error;
if (!SocketImpl::SetBlocking(m_handle, m_isBlockingEnabled, &error))
NazaraWarning("Failed to set socket blocking mode (0x" + String::Number(ERROR, 16) + ')');
SocketError errorCode;
if (!SocketImpl::SetBlocking(m_handle, m_isBlockingEnabled, &errorCode))
NazaraWarning("Failed to set socket blocking mode (0x" + String::Number(errorCode, 16) + ')');
}
bool AbstractSocket::Open(NetProtocol protocol)

View File

@ -70,22 +70,22 @@ namespace Nz
void TcpClient::EnableLowDelay(bool lowDelay)
{
NazaraAssert(m_handle != SocketImpl::InvalidHandle, "Invalid handle");
if (m_isLowDelayEnabled != lowDelay)
{
if (m_handle != SocketImpl::InvalidHandle)
SocketImpl::SetNoDelay(m_handle, lowDelay, &m_lastError);
m_isLowDelayEnabled = lowDelay;
}
}
void TcpClient::EnableKeepAlive(bool keepAlive, UInt64 msTime, UInt64 msInterval)
{
NazaraAssert(m_handle != SocketImpl::InvalidHandle, "Invalid handle");
if (m_isKeepAliveEnabled != keepAlive || m_keepAliveTime != msTime || m_keepAliveInterval != msInterval)
{
if (m_handle != SocketImpl::InvalidHandle)
SocketImpl::SetKeepAlive(m_handle, keepAlive, msTime, msInterval, &m_lastError);
m_isKeepAliveEnabled = keepAlive;
m_keepAliveInterval = msInterval;
m_keepAliveTime = msTime;
@ -268,10 +268,14 @@ namespace Nz
{
AbstractSocket::OnOpened();
m_isLowDelayEnabled = false; //< Nagle's algorithm, is this enabled everywhere?
m_isKeepAliveEnabled = false; //< default documentation value, OS can change this (TODO: Query OS default value)
m_keepAliveInterval = 1000; //< default documentation value, OS can change this (TODO: Query OS default value)
m_keepAliveTime = 7200000; //< default documentation value, OS can change this (TODO: Query OS default value)
SocketError errorCode;
if (!SocketImpl::SetNoDelay(m_handle, m_isLowDelayEnabled, &errorCode))
NazaraWarning("Failed to set socket no delay mode (0x" + String::Number(errorCode, 16) + ')');
if (!SocketImpl::SetKeepAlive(m_handle, m_isKeepAliveEnabled, m_keepAliveTime, m_keepAliveInterval, &errorCode))
NazaraWarning("Failed to set socket keep alive mode (0x" + String::Number(errorCode, 16) + ')');
m_peerAddress = IpAddress::Invalid;
}