예제 #1
0
	void EventGroup::GetEvents(EventArray& events) const
	{
		// put all names in list
		size_t num_names = EventMap.NumElements();
		for (size_t iname = 0; iname < num_names; iname++)
		{
			const EventNameID& nameid = EventMap[iname];
			events.SetIDName(nameid.ID, nameid.Name);
		}

		// put all event times
		for (EventGroupConstIter i(*this); i.HasFrame(); i.Next())
		{
			events.AddEvent(i.Time(), i.ID());
		}

	}
예제 #2
0
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
}
예제 #3
0
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
}