# ❓A、B 机器正常连接后,B 机器突然重启,问 A 此时处于 TCP 什么状态?
如果 A 与 B 建立了正常连接后,从未相互发过数据,这个时候 B 突然机器重启,问 A 此时处于 TCP 什么状态?如何消除服务器程序中的这个状态?(超纲题,了解即可)
一脸懵逼状态下的我。
- 三次握手完成后,在服务器 accept 前,客户发送 RST,会导致 accpet 出错,错误如何处理依赖于不同的实现
- 服务器和客户建立连接后,若服务器进程终止,则服务器发送 FIN 到客户。
- 服务器和客户建立连接后,若服务器主机崩溃,有两种可能:
- 服务器不重启,客户继续工作,就会发现对方没有回应(ETIMEOUT),路由器聪明的话,则是目的地不可达(EHOSTUNREACH)。
- 服务器重启后,客户继续工作,然而服务器已丢失客户信息,收到客户数据后响应 RST。
- 服务器和客户建立连接后,若服务器关机,init 进程会给所有进程发送 SIGTERM 信号预警,然后发送 SIGKILL 关闭所有其他进程,这样和 2 情况没什么差别。
# SIGPIPE 信号
向已收到 RST 的套接字写时会产生这个信号,默认终止进程。