2010-02-21 148 views
1

我正在写一个小C程序来理解套接字。 recvfrom返回的数据的最大长度是多少?recvfrom最大缓冲区TCP/IP

recvfrom(raw,packet_buffer,buf_size,...);

linux中buf_size的最大值是多少?是否有与此size_t相关的常量?

感谢

+0

为什么不看内核源代码?你可能不得不四处寻找,但答案就在那里。 – 2010-02-21 14:18:18

回答

1

这不是一个真正的直接答案......对这个问题有些偏袒。对于TCP/IP,即使您确定系统上的最大大小,最好实施代码以避免依赖该代码。使用面向流的套接字,多余的数据不会丢失。因此您可以再次调用接收函数来检索剩余的数据。尽管如此,对于面向消息的(UDP)连接,情况并非如此。

0

我认为最大的65535字节。它不依赖于MTU,因为它本身是由协议栈来处理的......所以基本上你有一个很好的抽象,以便在网络上发送有效的数据包。

2^16的选择应该是这样的,因为它是TCP窗口的最大尺寸(通常它不是64kb,但更小):所以它是协议允许TCP连接的最大缓冲区。

+0

不,它比这大得多,并且默认情况下是系统具有多少内存的函数。在大多数系统中,这几天它只有几兆字节。 – 2010-02-21 14:19:01