刚开始学习 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,那就要了,示例代码只是给你一个框架罢了 |