socket select模型编程

来源:互联网 发布:上海市软件测评中心 编辑:程序博客网 时间:2024/05/07 02:29
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)) //该套接字可写{//调用输出函数,发送数据}}}


0 0
原创粉丝点击