如何使recv调用非阻塞并使其等待仅5秒

时间:2018-06-13 01:17:54

标签: timeout blocking winsock2 recv

如何使recv调用非阻塞并使其等待仅5秒!

// Receive until the peer closes the connection
do {

    iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
    if ( iResult > 0 )
        printf("Bytes received: %d\n", iResult);
    else if ( iResult == 0 )
        printf("Connection closed\n");
    else
        printf("recv failed with error: %d\n", WSAGetLastError());

} while( iResult > 0 );

1 个答案:

答案 0 :(得分:0)

fd_set readfds;
struct timeval count;
FD_ZERO(&readfds);
FD_SET(sockfd, &readfds);
select(0, &readfds, 0, 0, &count);
if (FD_ISSET(sockfd, &readfds))
{   
     if ((bytes=recv(sockfd, buffer2, 200, 0)) == -1) {
          return 0;
     }
}