我需要在以太网接口断开连接(例如电缆断开,接口关闭等)时立即关闭所有正在进行的Linux TCP套接字。
似乎无法通过hack /proc来解决。 没有找到任何有价值的ioctl。
手动在应用程序级别上完成并不是我想要的,我真的正在寻找一种残酷且全局的方法。
有人之前遇到过这种情况并愿意分享他的发现吗?
避免应用级编程的残酷方式是通过黑客手段修改内核,在所有连接中启用低超时时间的TCP keepalive。
这很少需要,而且通常不会起作用。TCP是一种数据传输协议,除非有数据丢失,否则不应该做任何操作。三思而后行,想想为什么你需要这样做。
否则,您可以尝试定期轮询接口并检查UP标志。如果接口失去了UP标志,那么操作系统已经针对电缆被拔出并关闭了接口。man 7 netdevice
,详见SIOCGIFFLAGS。
网络驱动程序也会在插入电缆时生成事件,但我不确定用户是否可以访问该事件。您可能想要检查udev
,因为其文档明确提到了网络接口。