When recv returns 0, the connection has been remotely closed or dropped. Changes are to Read [ modified patch 1303565 ] and Select [ patch 1283936 ]

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35802 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Kevin Hock
2005-10-05 23:20:10 +00:00
parent edc536d358
commit 9b67181b39

View File

@@ -882,7 +882,13 @@ int GSocket::Read(char *buffer, int size)
else
ret = Recv_Dgram(buffer, size);
if (ret == -1) {
/* If recv returned zero, then the connection is lost, and errno is not set.
* Otherwise, recv has returned an error (-1), in which case we have lost the
* socket only if errno does _not_ indicate that there may be more data to read.
*/
if (ret == 0)
m_error = GSOCK_IOERR;
else if (ret == -1) {
if ((errno == EWOULDBLOCK) || (errno == EAGAIN))
m_error = GSOCK_WOULDBLOCK;
else
@@ -1026,7 +1032,12 @@ GSocketEventFlags GSocket::Select(GSocketEventFlags flags)
result |= GSOCK_CONNECTION_FLAG;
m_detected |= GSOCK_CONNECTION_FLAG;
}
else if ((errno != EWOULDBLOCK) && (errno != EAGAIN) && (errno != EINTR))
/* If recv returned zero, then the connection is lost, and errno is not set.
* Otherwise, recv has returned an error (-1), in which case we have lost the
* socket only if errno does _not_ indicate that there may be more data to read.
*/
else if (num == 0 ||
(errno != EWOULDBLOCK) && (errno != EAGAIN) && (errno != EINTR))
{
m_detected = GSOCK_LOST_FLAG;
m_establishing = false;