- return IsOpen() ? SerialSocketRead(m_socket, &m_iError, data, len, iTimeoutMs) : -1;
+ DWORD dwTimeoutMs((DWORD)iTimeoutMs);
+ if (iTimeoutMs != (uint64_t)iTimeoutMs)
+ dwTimeoutMs = MAXDWORD;
+
+ return IsOpen() && SetTimeouts(m_socket, &m_iError, dwTimeoutMs) ?
+ SerialSocketRead(m_socket, &m_iError, data, len, iTimeoutMs) :
+ -1;