【发布时间】:2014-01-22 19:25:19
【问题描述】:
我正在使用socket(AF_UNIX, SOCK_STREAM) 套接字在两个进程之间进行通信。
我希望接收器接收一个有上限的字节数,这个上限相当大(在 16MB 到 64MB 的范围内)。也就是说,我希望接收最多 [cap] 个字节的消息,如果消息大于该字节,我希望停止接收或丢弃消息的其余部分。
根据文档,执行此操作的方法似乎是使用 socket.recv(bufsize=[cap])。但有以下注意事项:
注意为了与硬件和网络现实进行最佳匹配,bufsize 的值应该是 2 的相对较小的幂,例如 4096。
这表明缓冲区大小不适用于此目的。那么,实现这一目标的最佳方法是什么?
【问题讨论】:
-
你不能只计算接收到的字节数,并且在接收到至少 (limit-4k) 个字节后,用剩余的内容调用 recv() 吗? TBH,我不完全理解你的要求,或者“信息”是什么。