我正在编写一个小型 C 程序来理解套接字。从 recvfrom 返回的数据的最大长度是多少?
recvfrom(raw, packet_buffer, buf_size, ... );
linux中的最大buf_size是多少。是否有与此 size_t 相关的常数?
谢谢
我正在编写一个小型 C 程序来理解套接字。从 recvfrom 返回的数据的最大长度是多少?
recvfrom(raw, packet_buffer, buf_size, ... );
linux中的最大buf_size是多少。是否有与此 size_t 相关的常数?
谢谢
这不是一个真正的直接答案......这个问题有点倾斜。对于 TCP/IP,即使您确定系统上的最大大小,最好实现代码而不依赖它。使用面向流的套接字,多余的数据不会丢失。因此,您可以再次调用接收函数来检索剩余的数据。但是,对于面向消息的 (UDP) 连接,情况并非如此。
我认为最大值是65535
字节。它不依赖于 MTU,因为它由协议栈自己处理。所以基本上你对网络上发送的有效数据包有一个很好的抽象。
2^16 的选择应该是这样,因为它是 TCP 窗口的最大大小(通常它不是 64kb,而是更小):所以它是协议允许 TCP 连接的最大缓冲区。