我们正在使用C/S在linux上开发一个网络应用程序,最近我们发现,当大量UDP和TCP数据通过带宽传输时,一些打开和连接的套接字上的写/读可能会失败,看来套接字由于某种未知原因而关闭了。
下面是问题,请告诉我TCP是否会自动关闭套接字。
任何帮助都将不胜感激!!
发布于 2013-01-21 15:08:09
我从未听说过TCP套接字会自动关闭自己,因此我对此表示怀疑。如果发送方无法发送任何数据,则只需等待并再试一次。套接字关闭的唯一原因是,如果发送方多次尝试发送数据,不能,然后显式关闭套接字。如果发送方有足够的带宽发送数据,但接收方缺乏接收数据的带宽,则协议本身将重新发送数据并确保数据正确到达(请参阅维基百科)。
至于#2,也来自维基百科(正如ott提到的):
当接收方广告窗口大小为0时,发送方停止发送数据并启动持久化计时器。持久化定时器用于防止TCP在接收方丢失后续窗口大小更新时可能出现的死锁情况,并且在从接收方接收到新的窗口大小更新之前,发送方无法发送更多数据。当持久化计时器过期时,TCP发送方通过发送一个小数据包来尝试恢复,以便接收方通过发送另一个包含新窗口大小的确认来响应。
因为TCP具有确定要发送多少数据的系统,所以我假设TCP连接总是可以接受一个更新数据包。在缓冲区仍然满的情况下,接收器将继续广播窗口大小为0的节目。除非一段软件在X重复"0窗口大小“之后显式关闭一个套接字,否则没有理由关闭该套接字。
https://stackoverflow.com/questions/14439567
复制相似问题