UDP一次性读取整个套接字缓冲区

时间:2013-03-07 11:55:17

标签: c++ udp

我有3个组件客户端代理服务器,有时当代理负载很重时,套接字缓冲区配置为1 MB被填充。有没有办法一次读取整个缓冲区1 MB,然后处理?

仅供参考:

  1. 所有数据克从不超出MTU大小是按照定义的结构格式,每个数据包的长度也加入。

  2. 代理在客户端和客户端之间路由数据。服务器,所以试过生产者&消费者线程但问题未解决

1 个答案:

答案 0 :(得分:2)

简短回答:没有。

长答案: Berkeley样式套接字实现允许每次调用仅接收或发送一个数据包。因此,无法读取完整的网络流并在另一侧重播。

一个原因是您的UDP套接字可以从多个源接收数据。接口应该能够将元信息(如发送方套接字地址)和至少数据包大小传递给调用方。这是一堆数据应该被解析,你会选择符合标准的数据包。最后,您可以构建要发送的数据包。

由于您必须有可能检查每个数据包,如果确实需要数据包,则需要一个函数来从数据包中读取数据包。这是函数recvfrom