
38312.9. Closing a Socket
ret = recvfrom(sock, data, readSize, 0, (SOCKADDR *)&remoteAddr,
&remoteAddrSize);
if (ret == SOCKET_ERROR) {
status = WSAGetLastError();
if ( status != WSAEWOULDBLOCK) // Don't report WOULDBLOCK
// error
return ((status << 16) + NET_ERROR);
ret = 0; // Clear SOCKET_ERROR
// If TCP connection did graceful close
} else if(ret == 0 && type == CONNECTED_TCP)
// Return Remote Disconnect error
return ((REMOTE_DISCONNECT << 16) + NET_ERROR);
if (ret)
// IP of sender
strncpy_s(senderIP, IP_SIZE, inet_ntoa(remoteAddr.sin_addr),
IP_SIZE);
size = ret; // Number of bytes read, may be 0
}
return NET_OK;
}
Listing 12.6(e). e ...