Назад | Перейти на главную страницу

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

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

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

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

Спасибо!

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

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

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