繁体   English   中英

套接字控制接受多个UDP连接

[英]socket control to accept multiple UDP connections

我想知道如何让客户端/服务器自己编写接受多个套接字连接的想法,使我大失所望。

该连接是一个数据报(UDP),目前已基于getaddrinfo(3) man page ,但是每个客户端都需要等待早期连接的处理。

我听说过select,但是在其手册页中说:

select()可用于以可移植且有效的方式解决许多问题,而天真的程序员尝试使用线程,分支,IPC,信号,内存共享等以更复杂的方式解决这些问题。

和更多:

特定于Linux的epoll(7)API提供的接口在监视大量文件描述符时比select(2)和poll(2)更有效。

那是吗 epoll比选择好吗? 还是取决于? 如果取决于的话?

epoll手册页有部分样本,因此我试图理解它。

现在,我认为(在服务器上)我需要一个线程来侦听一个线程并在另一个线程中进行写入。 但是如何控制部分消息的完成? 如果两个客户端交错发送部分消息,该如何识别? 由sockaddr? 如果只有它,我可以在没有池的情况下进行管理,那么为什么要使用epoll?

任何人都可以尝试向我解释如何制作多连接客户端-服务器UDP应用程序,或在何处学习?

我认为对UDP有误解。 UDP不是面向连接的协议,这意味着不存在像TCP这样的永久连接。 UDP只是绑定到一个地址/端口,并等待每个人的数据包。 在服务器上,每个地址/端口号只有一个套接字监听。 收到数据包后,您可以通过数据包的源IP找出谁是发件人,您可以通过该IP答复发件人。

正如我所看到的,不需要绑定到地址/端口并异步接收数据包的poll()或select()。 也就是说,当接收到数据包时,您会收到信号/消息,以警告您的异步功能。 该函数应该是可重入的,这意味着在接收过程中可能会接收到另一个信号,并且在访问/修改全局对象(变量/对象)时必须格外小心。 处理传入的数据包时,应尽快对其进行处理,或者如果处理时间过长,则最好将数据包保留在数据包假脱机中,并在另一个[优先级较低]线程中进行处理。

对于UDP数据包大小,请阅读问题。

对于UDP碎片,请阅读此内容

对于UDP数据包标头,请阅读以下内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM