bool Socket::IsOverlappedReceiveReady() const { if (IsUDPSlaveSocket()) // UDP slave sockets are never read directly. For these sockets, act as if they're never ready for reads. return false; #ifdef WIN32 if (queuedReceiveBuffers.Size() == 0) return false; return Event((*queuedReceiveBuffers.Front())->overlapped.hEvent, EventWaitRead).Test(); #else if (!readOpen) return false; EventArray ea; ea.AddEvent(Event(connectSocket, EventWaitRead)); return ea.Wait(0) == 0; #endif }
bool Socket::IsOverlappedSendReady() { if (!writeOpen) return false; #ifdef WIN32 if (queuedSendBuffers.CapacityLeft() > 0) return true; OverlappedTransferBuffer *sentData = *queuedSendBuffers.Front(); DWORD flags = 0; BOOL ret = WSAGetOverlappedResult(connectSocket, &sentData->overlapped, (LPDWORD)&sentData->bytesContains, FALSE, &flags); return ret == TRUE; #else EventArray ea; ea.AddEvent(Event(connectSocket, EventWaitWrite)); return ea.Wait(0) == 0; #endif }