Select模型

Select模型


int select(
    int nfds,
    fd_set FAR * readfds,
    fd_set FAR * writefds,
    fd_set FAR * exceptfds,
    const struct timeval FAR * timeout
);
第一个参数nfds,将会被系统忽略,包括这个参数只是为了和Berkeley Socket应用程序兼容.你将会注意到有三个fd_set结构的参数,一个用来检测可读,一个用来检测可写,第三个参数是带外数据(TCP紧急数据),timeout参数为超时时间
struct timeval {
        long    tv_sec;         /* seconds */
        long    tv_usec;        /* and microseconds */
};

#include <Winsock2.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
#define InternetAddr "127.0.0.1"
#define iPort 1986
using namespace std;
int main()
{
WSADATA wsa;
WSAStartup(MAKEWORD(2,2), &wsa);
SOCKET fdServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in server;
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(InternetAddr);
server.sin_port = htons(iPort);
int ret = bind(fdServer, (sockaddr*)&server, sizeof(server));
ret = listen(fdServer, 4);
SOCKET AcceptSocket;
fd_set fdread;
timeval tv;
int nSize;
while(1)
{
FD_ZERO(&fdread);//初始化fd_set
FD_SET(fdServer, &fdread);//分配套接字句柄到相应的fd_set
tv.tv_sec = 20;
tv.tv_usec = 0;
select(0, &fdread, NULL, NULL, &tv);
nSize = sizeof(server);
if (FD_ISSET(fdServer, &fdread))
{
AcceptSocket = accept(fdServer,( sockaddr*) &server, &nSize);
cout<<"采用Select模型,客户端开始连接"<<endl;
break;
}
else
{
cout<<"没有客户端连接,我可以做些别的事情"<<endl;
}
}
char buffer[128];
ZeroMemory(buffer, 128);
ret = recv(AcceptSocket,buffer,128,0);
cout<<buffer<<endl;
closesocket(AcceptSocket);
WSACleanup();
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二分掌柜的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值