请问select的意义、以及非阻塞式socket
在SOCKET编程中,总是看到有select的影子:
如:
//非阻塞式SOCKET+select
while(1)
{
FD_ZERO(&fdread);
FD_SET(m_ServerSocket, &fdread);
ret = select(0, &fdread, NULL, NULL, &timeout);
if(SOCKET_ERROR == ret)
{
closesocket(m_ServerSocket);
break;
}
if(ret > 0 )
{
if(FD_ISSET(m_ServerSocket, &fdread))
{
recvlen = recv(m_ServerSocket, recvbuf, sizeof(recvbuf), 0);
if(SOCKET_ERROR == recvlen)
{
closesocket(m_ServerSocket);
break;
}
else
{
//recv成功
}
}
}
}
为什么要用非阻塞式SOCKET+select来实现呢?用阻塞式的recv不一样就可以实现了吗?反正都是在等。
//阻塞式SOCKET
recvlen = recv(m_ServerSocket, recvbuf, sizeof(recvbuf), 0);
if(SOCKET_ERROR == recvlen)
{
closesocket(m_ServerSocket);
break;
}
else
{
//recv成功
}
请教这两者的区别?