summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
edc536d)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35802
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
else
ret = Recv_Dgram(buffer, size);
else
ret = Recv_Dgram(buffer, size);
+ /* 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
if ((errno == EWOULDBLOCK) || (errno == EAGAIN))
m_error = GSOCK_WOULDBLOCK;
else
result |= GSOCK_CONNECTION_FLAG;
m_detected |= GSOCK_CONNECTION_FLAG;
}
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;
{
m_detected = GSOCK_LOST_FLAG;
m_establishing = false;