c - 进程终止时是否保证发送 RST 数据包?

标签 c sockets winapi network-programming winsock

如果我有一个已连接套接字的进程,并且我终止了该进程,那么 Windows 将导致发送 RST 数据包。

是否保证(是否在某处记录)当进程终止时始终会发送 RST 数据包,或者是否可以发送 FIN 数据包?

最佳答案

当连接关闭时,TCP 不应发送 RST 数据包。要关闭连接,TCP 在客户端会经历以下状态:

  1. 发送 FIN 数据包。此操作会将 TCP 状态更改为 FIN_WAIT_1 .
  2. FIN_WAIT_1 ,TCP 等待服务器的确认 (ACK)。
  3. 收到确认后,TCP 会输入 FIN_WAIT_2 .
  4. FIN_WAIT_2 ,TCP 等待 FIN来自服务器的数据包
  5. 一次FIN到达后,客户端发送 ACK并输入TIME_WAIT
  6. TIME_WAIT一段时间后(通常为 30 秒或 1 分钟)退出。该状态的目的是使重新发送最终的ACK成为可能。到服务器以防丢失。

任何地方都没有 RST 数据包。 RST 用于响应意外流量,用于关闭连接。

例如,如果您将 TCP 数据包发送到端口 80,并且服务器没有运行 HTTP 服务器(并且假设数据包一路到达服务器并且没有被阻止/忽略),则 RST 回复为发送回客户端。

关于c - 进程终止时是否保证发送 RST 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30766180/

相关文章:

c - 如何使用 ioctl 和 FS_IOC_FIEMAP

c++ - 如何在C\C++中使用x264将位图作为帧写入H.264?

networking - 具有超过 1 个 IP 地址的机器上的套接字通信

c - 如何清除linux中的socket缓冲区

c - 无法设置套接字选项 IPV6 多播 : No such device error

谁能用c帮我解决这个问题?

python - 将十六进制值写入文件 Python

c++ - 性能计数器索引 windows pdh c

winapi - 监视虚拟内存区域 (Win32)

c# - GetLastInputInfo 的整数环绕问题