SOCKET listenSocket; //服务器监听套接字
SOCKET acceptSocket; //接收客户端连接请求套接字
FD_SET socketSet; //服务器套接字集合
FD_SET writeSet; //可写套接字集合
FD_SET readSet; //可读套接字集合
FD_ZERO(&socketSet) //清空服务器套接字集合
FD_SET(listenSocket,&socketSet); //加入监听套接字
while(TRUE)
{
FD_ZERO(&readSet); //清空可读套接字集合
FD_ZERO(&writeSet); //清空可写套接字集合
readSet=socketSet;
writeSet=socketSet;
//调用检查套接字状态
if(SOCKET_ERROR == select(0,&readSet,&writeSet,NULL,NULL))
{
//select函数调用失败处理
printf("select() returned with error %d\n",WSAGetLastError());
return;
}
//检查是否存在客户端的连接请求
if(FD_ISSET(listenSocket,&readSet))
{
//接受客户端请求
if(INVALID_SOCKET != (acceptSocket = accept(listenSocket,NULL,NULL)))
{
FD_SET(acceptSocket,&socketSet); //将该套接字加入服务器套接字集合
}
else
{
printf("accept() fail with error %d\n",WSAGetLastError());
return;
}
}
//遍历所有的套接字
for(int i=0;i<socketSet.fd_count;i++)
{
SOCKET sAccept=socketSet.fd_array[i];
if(FD_ISSET(sAccept,&readSet)) //该套接字可读
{
//调用输入函数,接收数据
}
if(FD_ISSET(sAccept,&writeSet)) //该套接字可写
{
//调用输出函数,发送数据
}
}
}
socket select模型编程
最新推荐文章于 2022-06-22 22:42:33 发布