在Linux中,套接字的缓冲区是如何工作的呢?例如,如果服务器不读取套接字并且客户端不断发送数据,会发生什么情况?套接字的缓冲区有多大?客户端是否知道应该停止发送数据呢?
在Linux中,套接字的缓冲区是如何工作的呢?例如,如果服务器不读取套接字并且客户端不断发送数据,会发生什么情况?套接字的缓冲区有多大?客户端是否知道应该停止发送数据呢?
对于UDP套接字客户端来说,它永远不会知道-服务器端只会在接收缓冲区填满后开始丢弃数据包。
另一方面,TCP实现了流量控制。服务器的内核将逐渐减小窗口,因此客户端将能够发送越来越少的数据。在某些时候,窗口将降至零。此时客户端填满其发送缓冲区并从send(2)
中接收到错误。
send()
的阻塞调用。缓冲区大小可以从几KB到几MB不等。我假设你在使用send()
和recv()
进行客户端和服务端之间的通信。
因此,send()
将返回发送的字节数。这不一定等于您想要发送的字节数,所以您需要意识到这一点并发送剩下的数据。
现在,recv()
返回读取到缓冲区中的字节数。因此,如果recv返回0,则服务器可能已关闭连接。