* Constructor for the Socket class.
*/
Socket::Socket(void)
-{
- m_FD = INVALID_SOCKET;
-}
+ : m_FD(INVALID_SOCKET), m_Connected(false)
+{ }
/**
* Destructor for the Socket class.
return;
}
- if (FD_ISSET(fd, &readfds))
+ if (FD_ISSET(fd, &readfds)) {
+ if (!m_Connected)
+ m_Connected = true;
+
HandleReadable();
+ }
if (FD_ISSET(fd, &exceptfds))
HandleException();
FD_ZERO(&writefds);
- while (!WantsToWrite()) {
+ while (!WantsToWrite() && m_Connected) {
m_WriteCV.timed_wait(lock, boost::posix_time::seconds(1));
if (GetFD() == INVALID_SOCKET)
return;
}
- if (FD_ISSET(fd, &writefds))
+ if (FD_ISSET(fd, &writefds)) {
+ if (!m_Connected)
+ m_Connected = true;
+
HandleWritable();
+ }
}
}
* @param role The role of the TCP client socket.
*/
TcpClient::TcpClient(TcpClientRole role)
-{
- m_Role = role;
-
- m_SendQueue = boost::make_shared<FIFO>();
- m_RecvQueue = boost::make_shared<FIFO>();
-}
+ : m_Role(role), m_SendQueue(boost::make_shared<FIFO>()),
+ m_RecvQueue(boost::make_shared<FIFO>())
+{ }
/**
* Retrieves the role of the socket.