接收操作中应该达到的最大数据大小是多少?必须发送的数据非常大,但在某些时候我会猜到数据包碎片?
答案 0 :(得分:6)
与MTU没什么关系。在某些TCP堆栈设计中,对recv()的一次调用不会返回多个基础数据包协议的数据报。在其他情况下,它可能与套接字的接收缓冲区一样大。
答案 1 :(得分:1)
有一些类似于最大网络数据包大小的内容:
这表示在通过网络传输数据(非环回)期间,低级缓冲区(3个iso / osi层IP)的最大大小。 在以太网网络中通常为1492。
因此,将数据传输优化到此数量的大小是值得的。
(也有所谓的Jumbo frames违反了这个规则,但必须有接受该规则的软件/硬件)
然而,socket上的简单recv()可以返回比MTU更多的字节。 因此,您需要传输具有其余数据大小的第一个数据包。
size = recv(512) // size should came in one shot
while( count(data) == size) // the rest of actual data can came sliced, so You should receive until size
data[offset] = recv(size)