查看nginx: ignore some requests without proper Host header让我想到,如果没有操作系统通过向另一端发送close(2)(和/或RST)正确地终止基础TCP连接,则实际上不可能通过TCP连接 FIN

一种解决方法是使用类似 tcpdrop(8) 的方法,但是,从 usr.sbin/tcpdrop/tcpdrop.c on OpenBSDFreeBSD可以看出,它是通过基于sysctl的界面实现的,并且可能在BSD之外具有可移植性问题。 (实际上,看起来甚至基于sysctl的实现在OpenBSD和FreeBSD之间可能也足够不同,因此需要一个移植层-OpenBSD uses tcp_ident_mapping 结构(其后包含两个sockaddr_storage元素以及一些其他信息),而FreeBSDDragonFlyNetBSD直接使用两个sockaddr_storage元素组成的数组。)事实证明,OpenBSD的tcpdrop确实按照 R 发送了tcpdump(8)数据包,可以通过查看 /sys/netinet/tcp_subr.c :: tcp_drop() 进行确认,该方法最后调用tcp_close()(和tcp_close()) is confirmed to send RST elsewhere on SO),因此似乎也无法使用。

如果我自己通过C建立连接,是否有一种方法可以随后在不确认对方的情况下将其丢弃,例如不启动RST

最佳答案



不会。即使存在,如果对等方随后发送了任何内容,它也会由RST响应。

注意:正常的TCP终止使用FIN,而不是RST。

关于c - 在不发送RST的情况下断开打开的TCP连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46147009/

10-11 22:06