如果TCP套接字设置为非阻塞模式并且最初设置了套接字发送缓冲区, 然后send在循环中用于发送所有数据。如果由于EAGAIN错误导致发送失败,是否可以增加发送套接字缓冲区? 我正在使用Linux操作系统。我想了解是否允许调整sendbuffer大小的大小。在tcp man page上,“在单个连接上,必须在listen(2)或connect(2)调用之前设置套接字缓冲区大小才能使其生效。”这就是问题出现的原因
答案 0 :(得分:3)
你可以尝试tuning the networking buffers但这可能不是一个好主意。无论你有多大的缓冲区,都会出现问题,因此你需要编写代码来处理这种情况。
答案 1 :(得分:2)
这将是内核网络堆栈的实现细节,即您运行的操作系统(您未说明)。我相信你可以在大多数现代操作系统上做到这一点,因为它只是一个专用于给定套接字的数字限制内存,但这是解决问题的一种完全错误的方式,因为:
找出您的流量突发内存要求,预设套接字发送缓冲区大小,应用程序端的缓冲区。