уничтожить привязку TCP-порта, удалив proc / [0-9] / net /… в linux

У меня есть сценарий для вызова системного вызова. Убейте процесс, который содержит определенный порт TCP в Linux (ubuntu). Но даже если я это сделаю, иногда порт все равно остается в каталоге / proc / [0-9] / net , связывая порт.

Есть ли простой способ принудительно освободить TCP-порт? Я знаю, в каком каталоге proc / X находится порт, который я хочу убить. Могу ли я просто удалить каталог / proc / XXX / и считать, что порт свободен для использования после этого удаления?

В некоторых сообщениях говорится, что я могу использовать fuser , но я хочу знать, что происходит на уровне ОС.

Спасибо!

0
задан 10 January 2016 в 01:01
1 ответ

Порт остается связанным, поскольку вызывающее приложение, которое привязано к порту, не использует параметр сокета SO_REUSEADDR . Для этого необходимо исправить вызывающее приложение. В C:

int yes = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&yes, sizeof(yes));

Это очищает себя в убитом приложении через net.ipv4.tcp_fin_timeout секунд. Однако лучше всего исправить вызывающую программу, чтобы она работала правильно.

2
ответ дан 4 December 2019 в 13:44

Теги

Похожие вопросы