gpt4 book ai didi

c - FIN-PSH-ACK 服务器端关闭引发来自客户端的 RST

转载 作者:行者123 更新时间:2023-11-30 17:23:07 26 4
gpt4 key购买 nike

我探索客户端-服务器交互,并使用 nginx 服务器和我自己的客户端(c 代码)。当服务器上的保持事件请求计数器耗尽时(nginx的默认值:keepalive_requests 100;)我可以在wireshark中看到服务器使用[FIN PSH ACK]启动关闭,而客户端-我通过epoll的EPOLLRDHUP | 检测到关闭EPOLLHUP 标志并调用 close(file_descriptor) 而不与 so_linger 发生任何困惑 - 将发送 [RST ACK] 数据包而不是预期的 [FIN ACK]。

我的印象是,这种机制可能是一个较新的功能,允许服务器启动关闭而不必经过 CLOSE_WAIT 阶段,但我在谷歌上找不到任何相关内容。请问有什么想法吗?

最佳答案

好吧,我自己就明白了。当我基于 epoll 的 RDHUP/HUP 标志调用 close() 时,我没有从 read(file_descriptor) 调用中得到 0,这可能是某些数据仍在 skb 中(即使我在检查 RDHUP/HUP 标志之前读取了它) )。在这种情况下,内核将按照以下方式发送 RST 来代替 FIN:

( http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_termination )

某些主机 TCP 堆栈可能会实现半双工关闭序列,如 Linux 或 HP-UX 所做的那样。如果此类主机主动关闭连接,但仍未读取堆栈已从链路接收到的所有传入数据,则该主机将发送 RST 而不是 FIN(RFC 1122 中的第 4.2.2.13 节)。

关于c - FIN-PSH-ACK 服务器端关闭引发来自客户端的 RST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27706151/

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