我在本地运行长时间运行的套接字连接。当我杀死服务器应用程序时,它会干净地关闭。我现在想看看客户端在没有干净地关闭时的行为方式。如果他们在不同的服务器上,我可以拔出网线。当连接是本地连接时,我没有什么可拉的。 [在这里插入粗鲁的笑话。]
我可以netstat -an |grep tcp | grep :80
查看连接,看起来像这样:
tcp 0 0 10.1.2.3:80 10.1.2.3:40494 ESTABLISHED
我是否可以使用该40494端口号来终止或挂起套接字,就像我可以使用程序的PID来杀死它一样?
非常相似的问题:How can I simulate a 'plugged network cable' (TCP/IP)?(这个问题是关于Windows,我在Linux上)
答案 0 :(得分:0)
卸载网络驱动程序的内核模块可能会以您希望的方式终止它。
从活动列表(eth0,eth1等等)中选择您的网络接口
ifconfig -a
eth0 Link encap:Ethernet HWaddr 18:A9:05:68:6F:B0
inet6 addr: fe80::1aa9:5ff:fe68:6fb0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1
查找eth0接口的驱动程序模块
ls -l /sys/class/net/eth0/device/driver/module
lrwxrwxrwx 1 root root 0 Aug 15 18:39 module -> ../../../../module/bnx2
列出系统运行的内核模块
lsmod | grep bnx
bnx2i 48158 0
cnic 55511 1 bnx2i
bnx2 81890 0
要从内存中删除模块,需要root或sudo访问
rmmod -f -w bnx2
这不是一个安全的操作,并且您以不安全的方式搞乱操作系统。当你这样做时,预计会发生坏事(tm)。不要在生产环境中这样做。此外,这可能不起作用,具体取决于驾驶员行为本身。
那就是说,这是一个有趣的问题,我很想知道结果如何。
答案 1 :(得分:0)
看来答案是“不”,没有办法杀死某个特定的连接。
我最终做的是sudo ifdown eth0
(之后sudo ifup eth0
恢复网络)。显然,这是一种大锤方法,因为它取消了所有连接。
为了完整性,另一种方法是猜测哪个Apache进程正在运行套接字连接,并且只杀死该进程。但除了涉及猜测之外,这也比我提出的问题更具针对性。