刚开始学习 linux 网络编程 照着书本抄了两份 UDPServer 的代码, 一份直接使用 recvfrom 一份在前面顶着一个 select,也大概明白 select 的好法,传入 sockfd+1,然后系统会判断是否有可读写的 sockfd,有能进行下一步,没有就阻塞到超时。
select 在下面的代码中起来的作用有多大? 有没有必要?
伪代码如下: recvfrom:
while (true)
{
len = sizeof(cliaddr);
int n = recvfrom(sockfd, buf, 1024, 0, (struct sockaddr *) &cliaddr, &len);
// 有数据来,放入队列,立即返回下一轮
PushQueue(...)
}
select 模型:
while (true)
{
FD_SET(sockfd, &fdset);
if (select(sockfd + 1, &fdset, &fdset, &fdset, &tv))
{
len = sizeof(cliaddr);
int n = recvfrom(sockfd, buf, 1024, 0, (struct sockaddr*) &cliaddr, &len);
// 有数据来,放入队列,立即返回下一轮
PushQueue(...);
}
}
1
choury 2017-10-04 00:14:57 +08:00
你要是就一个 socket 还 select 啥啊,你要是同时 recvfrom 好多 fd,那就要了,示例代码只是给你一个框架罢了
|