C++ C++;:boost::asio:what';我可以为TCP套接字使用的最大缓冲区大小是多少?

C++ C++;:boost::asio:what';我可以为TCP套接字使用的最大缓冲区大小是多少?,c++,boost,buffer,boost-asio,C++,Boost,Buffer,Boost Asio,在这种情况下,默认缓冲区大小为1K=1024字节。对于我可以增加多少,是否有实际限制?如果我将缓冲区设置为大约100MB,它是否可以正常工作而没有不可预见的问题 请注意,缓冲区不仅仅是保留大小;它还被传递到read()和write()。由于大小限制,这些函数在多大的情况下会遇到问题?是否存在这样的限制?我可以想象,对于我能写多少write(),至少有一个定义的限制 除了int的最大值之外,没有其他限制,但是大于套接字接收缓冲区的读取缓冲区是没有意义的,因为超出的部分永远不能使用。无限大,甚至更大

在这种情况下,默认缓冲区大小为1K=1024字节。对于我可以增加多少,是否有实际限制?如果我将缓冲区设置为大约100MB,它是否可以正常工作而没有不可预见的问题


请注意,缓冲区不仅仅是保留大小;它还被传递到
read()
write()
。由于大小限制,这些函数在多大的情况下会遇到问题?是否存在这样的限制?我可以想象,对于我能写多少
write()
,至少有一个定义的限制

除了
int
的最大值之外,没有其他限制,但是大于套接字接收缓冲区的读取缓冲区是没有意义的,因为超出的部分永远不能使用。

无限大,甚至更大。它被填满的几率是微乎其微的。一个好的缓冲区大小是4096字节。在不太频繁地搔痒操作系统和不丢弃一级缓存之间取得了很好的平衡。通常情况下,应用程序协议的特性有助于引导用户找到最佳保留缓冲区大小。另外,请注意,示例的
max_length
仅用于本地缓冲区保留和对应用程序协议实施限制(
getline()
)。传递给读写操作的缓冲区大小是计算出的请求长度,它可能小于
max\u length
@TannerSansbury谢谢您提供的信息!谢谢你的回答。你能进一步告诉我插座缓冲区有多大吗?我在哪里能找到那个号码?即使我将100 MB写入套接字,程序是否仍能在不丢失数据的情况下工作?@量子物理学家本地发送方和远程接收方的网络堆栈缓冲区的大小取决于实现,可能需要查阅实现文档。作为TCP协议处理的一部分,写入的数据不会丢失
write()
将被阻止,直到本地网络堆栈的写入缓冲区中有可用空间为止。@BryanO'Neil没有语法错误需要修复。编辑被拒绝。