У меня есть сценарий для вызова 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
секунд. Лучше всего исправить вызывающую программу, чтобы она работала правильно.