cns*_*nst 5 c sockets network-programming tcp tcp-rst
调查nginx: 忽略一些没有正确主机标头的请求close(2)让我想到,如果操作系统没有通过向另一端发送RST(和/或) 来正确终止底层 TCP 连接,实际上不可能建立TCP 连接。FIN
一种解决方法是使用类似的东西,但是,从OpenBSD和FreeBSD 事实证明,OpenBSDtcpdrop(8)上可以看出,它是通过基于 sysctl 的接口实现的,并且可能在 BSD 之外存在可移植性问题。(事实上,看起来 OpenBSD 和 FreeBSD 之间甚至基于 sysctl 的实现也可能有足够的不同,需要一个移植层——OpenBSD 使用该结构(随后包含两个元素,加上一些其他信息),而FreeBSD,DragonFly和NetBSD直接使用两个元素的数组。)usr.sbin/tcpdrop/tcpdrop.ctcp_ident_mappingsockaddr_storagesockaddr_storagetcpdrop确实按照 发送R数据包tcpdump(8),并且可以通过查看 来确认/sys/netinet/tcp_subr.c :: tcp_drop(),它tcp_close()最终调用(并tcp_close() 确认发送到RSTSO 上的其他地方) ,所以,看起来它也不起作用。
如果我自己通过 C 建立连接,是否有办法随后在不向另一方确认的情况下将其删除,例如,不启动RST?
如果我自己通过 C 建立连接,是否有办法随后在不向另一方确认的情况下将其删除,例如,不启动 RST?
不会。即使有,如果对等方随后发送任何内容,也会通过 RST 进行答复。
注意:正常的 TCP 终止使用 FIN,而不是 RST。