(svn r20933) -Codechange: move some more client related methods and such to network_client.cpp

This commit is contained in:
rubidium
2010-10-15 19:33:08 +00:00
parent 780f120c32
commit f555e6d72e
7 changed files with 161 additions and 111 deletions

View File

@@ -214,4 +214,31 @@ bool NetworkTCPSocketHandler::IsPacketQueueEmpty()
return this->packet_queue == NULL;
}
/**
* Check whether this socket can send or receive something.
* @return \c true when there is something to receive.
* @note Sets #writeable if more data can be sent.
*/
bool NetworkTCPSocketHandler::CanSendReceive()
{
fd_set read_fd, write_fd;
struct timeval tv;
FD_ZERO(&read_fd);
FD_ZERO(&write_fd);
FD_SET(this->sock, &read_fd);
FD_SET(this->sock, &write_fd);
tv.tv_sec = tv.tv_usec = 0; // don't block at all.
#if !defined(__MORPHOS__) && !defined(__AMIGA__)
select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv);
#else
WaitSelect(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv, NULL);
#endif
this->writable = !!FD_ISSET(this->sock, &write_fd);
return FD_ISSET(this->sock, &read_fd);
}
#endif /* ENABLE_NETWORK */