gpt4 book ai didi

网络崩溃和套接字的后续状态

转载 作者:行者123 更新时间:2023-11-30 16:01:58 25 4
gpt4 key购买 nike

我想知道当套接字工作的网络崩溃时,套接字的状态会如何变化。我的问题是,当我模拟该网络崩溃时,控制所有套接字的 select() 函数会返回一些理论上不应设置的套接字。操作系统有可能在写入和读取时都设置了崩溃的套接字吗?

最佳答案

首先要记住的是,您的计算机通常不会知道“网络崩溃”本身何时。计算机所知道的只是它是否正在从网络接收数据包。 (某些计算机可能还知道其本地以太网端口上的电信号是否已消失,但由于网络的较远部分可能会出现故障而不影响本地以太网电缆上的信号,因此该信息仅偶尔有用)。

实际上,如果您的计算机和(与之通信的计算机)之间的网络停止工作,您将看到以下影响:

(1) 您发送的任何 UDP 数据包都将被毫无踪迹地丢弃,并且通常没有任何错误指示。当然,您也不会从远程对等点收到任何 UDP 数据包。

(2) 您的计算机和远程对等点之间的任何 TCP 连接上的数据流量将迅速停止。经过一定的超时时间(通常是几分钟)后,操作系统没有收到远程对等点的任何响应,操作系统将“放弃”并将 TCP 连接标记为关闭;此时,您将看到与远程对等点故意关闭连接时所得到的行为相同的行为:也就是说, select() 将返回准备读(也可能准备写,我忘记了),然后当你尝试在套接字上实际执行recv()或read()时,你将得到一个EOF(即阻塞套接字上的recv()将返回0;非阻塞套接字上的recv()将返回- 1)。 (如果网络在超时完成之前恢复,则套接字上的 TCP 流量将恢复,尽管它将开始缓慢恢复,并随着时间的推移逐渐加速)

关于网络崩溃和套接字的后续状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5826325/

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