gpt4 book ai didi

c - 关于 TCP 连接缓冲区的问题

转载 作者:可可西里 更新时间:2023-11-01 02:34:55 25 4
gpt4 key购买 nike

Linux。

我在两台计算机之间使用以太网电缆。一个用 C 编写的简单的服务器-客户端程序,用于将文件从客户端传输到服务器。客户端从文件中读取100字节的数据发送给服务器,然后等待2秒再发送下一个数据包。

当客户端发送数据时,我拔掉了服务器端的以太网电缆,由于连接中断,我预计客户端会出现一些错误。但是客户端一直在将数据写入管道,而服务器没有收到任何东西(但仍在等待接收)。客户端发送了整个文件并停止了。现在,我再次连接以太网电缆,服务器接收客户端发送的所有数据。这怎么可能?数据包是否存储在某个缓冲区中并在连接建立时再次发送?

很抱歉让它太长了。

最佳答案

TCP 的全部意义在于提供可靠的数据传输尽管底层网络不可靠。基本上,它的工作方式是 TCP 仅在收到来自远程机器的确认数据包后才考虑发送的数据;在此之前,内核将数据存储在本地。缓冲的时间可能会很长,具体取决于 /proc 中的一系列设置以及测量的网络参数。

编辑:应用程序可以使用 SIOCOUTQ ioctl 检查未完成发送队列的大小;请参阅 tcp(7) 联机帮助页。同一联机帮助页也讨论了错误处理。

如果您希望数据丢失而不是缓冲,请使用 UDP。

关于c - 关于 TCP 连接缓冲区的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4147219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com