2010-01-27 125 views

回答

1

有somethng像最大网络包大小:

MTU

这指示通过网络的数据传输过程中的最大尺寸截止低电平缓冲液(3 ISO/OSI层IP)(未回送)。 以太网络中通常为1492。

因此,将数据传输优化为此数量的大小是值得的。

(也有所谓的Jumbo frames打破这个规则,但必须是接受软件/硬件)

但是简单的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) 
+0

“*大小应该是一个镜头*”嗯......为什么?! – 2017-08-14 05:02:30

6
  1. 您可以随时限制缓冲区的recv(大小)将填补(参数)
  2. 您的应用程序设计不应该是字节的recv(金额大小写)愿意在一个提供呼叫。

它与MTU没有多大关系。在某些TCP堆栈设计中,对recv()的一次调用不会返回多于一个底层数据包协议的数据报。在其他情况下,它可能与套接字的接收缓冲区一样大。

相关问题