我们知道Windows CE不支持PC版Windows可用的WSAAsync异步调用,不过我们仍然可以将套接字从默认的阻塞模式转换到非阻塞模式.在非阻塞模式下,所有可能需要等待成功执行其功能的套接字调用都会立刻返回WSAEWOULDBLOCK错误代码.接着我们可以在此后再次调用阻塞的函数来完成任务.
可以使用ioctlsocket函数将套接字设置成非阻塞模式.
BOOL fBlocking = FALSE;
ioctlsocket(sock, FIONBIO, &fBlocking);
接下来我们可以使用select函数来等待套接字事件.
fd_set fdReadSocks;
FD_ZERO(&fdReadSocks);
FD_SET(hSock, &fdReadSocks);
int rc = select(0, &fdReadSocks, NULL, NULL, NULL);
if (rc != SOCKET_ERROR)
{
if (FD_ISSET(hSock, &fdReadSocks))
// A read event occurred in socket
}