UDPServer 有必要使用 select 模型吗?

2017-10-04 00:09:30 +08:00
 bccber

刚开始学习 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(...);
	}
}
2992 次点击
所在节点    问与答
1 条回复
choury
2017-10-04 00:14:57 +08:00
你要是就一个 socket 还 select 啥啊,你要是同时 recvfrom 好多 fd,那就要了,示例代码只是给你一个框架罢了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/395342

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX