我在使用单选调用编写我的第一个异步服务器时遇到了这个问题:
if( (retv = select((hsock<highestsocket?highestsocket:hsock)+1, &rFdx, &wFdx, &eFdx, 0) ) > 0)
{
printf("select() ended...\n");
if(FD_ISSET(hsock, &rFdx))
{
// .... handle new connection
}
for(unsigned int i=0; i < ClientList.size(); i++)
{
ServerClient* client = ClientList[i];
if(FD_ISSET(client->socket, &rFdx))
{
// handle client read
}
if(FD_ISSET(client->socket, &wFdx))
{
// handle client write
}
}
}
我希望在从其他线程调用 FD_SET 时选择停止等待然后处理客户端写入。
如果我从同一个线程调用客户端套接字上的 FD_SET,一切都会按预期工作。但是从其他线程调用它什么都不做,选择会一直等待,直到从客户端接收到任何数据。