Закрытие всех сокетов TCP на интерфейсе Down - PullRequest
4 голосов
/ 19 июля 2010

Мне нужно закрыть все текущие сокеты Linux Linux TCP, как только интерфейс Ethernet отключится (т. Е. Кабель отключен, интерфейс отключен и т. Д.).

Взлом в / proc, похоже, не делаеттрюк.Не найдено никаких ценных ioctl's.Делать это вручную на уровне приложения - это не то, чего я хочу, я действительно ищу жестокий и глобальный способ сделать это.

Кто-нибудь из них испытал это раньше и хотел поделиться своими основами?

Ответы [ 2 ]

0 голосов
/ 20 июля 2010

Это редко требуется и часто не работает.TCP - это протокол передачи данных, если нет потери данных, ничего не следует делать.Подумайте дважды, почему вам это когда-нибудь понадобится.

В противном случае вы можете попытаться периодически опрашивать интерфейс (ы) и проверять наличие флага UP.Если интерфейс теряет флаг UP, то ОС уже отреагировала на отключение кабеля и отключила интерфейс.man 7 netdevice, подробнее см. SIOCGIFFLAGS.

Сетевые драйверы также генерируют событие даже при подключенном кабеле, но я не уверен, можете ли вы получить к нему доступ или нет от пользователя,Возможно, вы захотите проверить udev в его документации явно упоминается сетевые интерфейсы .

0 голосов
/ 19 июля 2010

Жестокий способ избежать кодирования на уровне приложений - взломать ваше ядро, чтобы активировать поддержку активности TCP с небольшим таймаутом для всех ваших соединений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...