使用send()时是否有“最佳”缓冲区大小?

时间:2011-02-09 22:35:33

标签: sockets winsock send file-transfer

假设您正在通过TCP / IP传输任意长度的文件:

looping...
    read(buffer, LENGTH)
    send(mysocket, buffer, LENGTH, flags)

我的问题是,LENGTH的最佳价值是什么?或者根本没关系?我已经看到了从256字节到8192字节的所有内容。

3 个答案:

答案 0 :(得分:2)

取决于你的最佳意思。为了最佳地使用带宽,您希望最大化数据包大小,以便至少发送网络数据包大小(在以太网上通常大约为1500字节)。如果您正在从磁盘4096读取或8192字节将是一个很好的值。

答案 1 :(得分:0)

如果您的缓冲区大小转换为数据包大小,则较短的缓冲区更好 - 在发生数据包错误时更少重新传输。

ATM通过一个54字节的数据包将其发挥到极致。

但是根据你的库,它可能正在做一些自己的缓冲并独立设置其数据包大小。 YMMV。

答案 2 :(得分:0)

如果您通过高延迟连接发送大量数据,则可以使用更大的发送缓冲区获得更好的吞吐量。这是一个很好的解释: http://www.onlamp.com/pub/a/onlamp/2005/11/17/tcp_tuning.html