Changeset 7805 for trunk/src


Ignore:
Timestamp:
Feb 6, 2002, 11:33:56 AM (24 years ago)
Author:
sandervl
Message:

minor recv update (error handling)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wsock32/wsock32.cpp

    r7461 r7805  
    1 /* $Id: wsock32.cpp,v 1.45 2001-11-27 11:13:03 sandervl Exp $ */
     1/* $Id: wsock32.cpp,v 1.46 2002-02-06 10:33:56 sandervl Exp $ */
    22
    33/*
     
    657657   if(ret == SOCKET_ERROR) {
    658658        WSASetLastError(wsaErrno());
     659        return SOCKET_ERROR;
    659660   }
    660661   else
     
    663664
    664665        state = ioctl(s, FIOBSTATUS, (char *)&tmp, sizeof(tmp));
     666        if(state & SS_CANTRCVMORE) {
     667                dprintf(("recv returned 0, socket is no longer connected -> return WSAENOTCONN"));
     668                WSASetLastError(WSANO_DATA);
     669                return 0; //graceful close
     670        }
     671        else
     672        if(state & (SS_ISDISCONNECTING|SS_ISDISCONNECTED)) {
     673                dprintf(("recv returned 0, socket is no longer connected -> return WSAENOTCONN"));
     674                WSASetLastError(WSAENOTCONN);
     675                return 0; //graceful close
     676        }
     677        else
    665678        if(state & SS_ISCONNECTED && flags != MSG_PEEK) {
    666679                dprintf(("recv returned 0, but socket is still connected -> return WSAWOULDBLOCK"));
    667680                WSASetLastError(WSAEWOULDBLOCK);
    668                 ret = 0; //graceful close
     681                return SOCKET_ERROR;
    669682        }
    670683   }
     
    974987                }
    975988                yy = (struct ws_linger *)optval;
     989                dprintf(("%s: onoff %x linger %x", (optname == SO_DONTLINGER) ? "SO_DONTLINGER" : "SO_LINGER", (int)yy->l_onoff, (int)yy->l_linger));
    976990                xx.l_onoff  = (optname == SO_DONTLINGER) ? !yy->l_onoff : yy->l_onoff;
    977991                xx.l_linger = yy->l_linger;
Note: See TracChangeset for help on using the changeset viewer.