Network/SocketPollerImpl: Fix possible weird behavior with SocketPoller

This commit is contained in:
Jérôme Leclercq 2017-05-17 11:29:55 +02:00
parent e4a9d73942
commit ba24181fd6
1 changed files with 15 additions and 3 deletions

View File

@ -136,14 +136,26 @@ namespace Nz
#if NAZARA_NETWORK_POLL_SUPPORT #if NAZARA_NETWORK_POLL_SUPPORT
activeSockets = SocketImpl::Poll(m_sockets.data(), m_sockets.size(), static_cast<int>(msTimeout), error); activeSockets = SocketImpl::Poll(m_sockets.data(), m_sockets.size(), static_cast<int>(msTimeout), error);
#else #else
fd_set* readSet = nullptr;
fd_set* writeSet = nullptr;
if (m_readSockets.fd_count > 0)
{
m_readyToReadSockets = m_readSockets; m_readyToReadSockets = m_readSockets;
readSet = &m_readyToReadSockets;
}
if (m_writeSockets.fd_count > 0)
{
m_readyToWriteSockets = m_writeSockets; m_readyToWriteSockets = m_writeSockets;
readSet = &m_readyToWriteSockets;
}
timeval tv; timeval tv;
tv.tv_sec = static_cast<long>(msTimeout / 1000ULL); tv.tv_sec = static_cast<long>(msTimeout / 1000ULL);
tv.tv_usec = static_cast<long>((msTimeout % 1000ULL) * 1000ULL); tv.tv_usec = static_cast<long>((msTimeout % 1000ULL) * 1000ULL);
activeSockets = ::select(0xDEADBEEF, &m_readyToReadSockets, &m_readyToWriteSockets, nullptr, (msTimeout > 0) ? &tv : nullptr); //< The first argument is ignored on Windows activeSockets = ::select(0xDEADBEEF, readSet, writeSet, nullptr, (msTimeout > 0) ? &tv : nullptr); //< The first argument is ignored on Windows
if (activeSockets == SOCKET_ERROR) if (activeSockets == SOCKET_ERROR)
{ {
if (error) if (error)