1

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

供参考:

  1. 所有数据包都不会超过 MTU 大小,都是按定义的结构格式,其中还添加了每个数据包的长度。

  2. 代理在客户端和服务器之间路由数据,因此尝试使用生产者和消费者线程但问题未解决

4

1 回答 1

2

简短的回答:不。

长答案:伯克利风格的套接字实现允许每次调用只接收或发送一个数据包。因此,不可能读取完整的网络流并在另一端重播。

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

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

于 2013-03-07T12:07:13.563 回答