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