我试图了解以下场景的典型行为。请注意,我愿意为任何操作系统(*nix、Windows、...)找到更多关于这个边缘案例的信息。
如果应用程序被阻塞等待或延迟套接字关闭,当机器重新启动时会发生什么?
考虑以下示例场景:
应用程序有一个已建立的 TCP 套接字,然后在该套接字上调用 close()。套接字配置为逗留 (SO_LINGER) 10 秒。
由于延迟设置,应用程序会阻塞,等待(最多)10 秒的延迟时间以 TX/RX/ACK 连接上的剩余数据。
在此期间,内核重新启动(例如,用户重新启动机器)。
在这种情况下内核会做什么?
它是否强制套接字关闭(“中止关闭”)?导致任何未发送/未确认的数据丢失?
或者它是否尊重逗留时间并等待(可能)整整 10 秒?(因此阻止重新启动,可能直到整整 10 秒的逗留时间到期)。
还有什么?
谢谢,
史蒂夫