【发布时间】:2013-07-22 02:52:35
【问题描述】:
我想了解如何让自己编写的客户端/服务器接受多个套接字连接。
连接是数据报(UDP),目前是基于getaddrinfo(3) man page实现的,效果不错,但是每个客户端都需要等待早期连接的处理过程。
我听说过 select,但在其手册页中说:
select() 可以用来解决很多问题 天真的程序员试图解决的可移植且高效的方法 使用线程、分叉、IPC、信号、内存的更复杂的方式 分享等等。
还有更多:
Linux 特定的 epoll(7) API 提供了一个接口 更多的 在监控大量数据时比 select(2) 和 poll(2) 更有效 文件描述符。
那么,是吗? epoll 简直比 select 好?还是视情况而定?如果取决于,取决于什么?
epoll 手册页有部分示例,所以我试图理解它。
现在,(在服务器上)我想,我需要一个线程来监听一个线程并写入另一个线程。但是如何控制部分消息的完成呢?如果两个客户端交错发送部分消息,如何识别?通过 sockaddr?如果它是唯一需要,我可以在没有池的情况下管理它,那么为什么要使用 epoll?
谁能尝试向我解释一下,如何制作,或者在哪里了解多连接客户端-服务器 UDP 应用程序?
【问题讨论】:
-
1.是的,
epoll比select好。 2.看书Unix Network Programming -
我会阅读它,感谢您的回复...如果您将您的评论推广到回复,我会投票。
-
没有“接受[ing]多个UDP连接”之类的东西。只能从一个或多个远程源读取 UDP 数据报。
标签: c sockets epoll getaddrinfo