Есть клиент и есть сервер, написаны через модуль socket. Сервер в беск. цикле ждет соединения (socket.accept(...)).
Нужно в ОДНОМ скрипте bash запустить сервер, запустить клиента (тот стучится на сервер чего то делает и отваливается), потом грохнуть сервер так, что бы он отдал порт.
Запускаем сервер в фоне, запускаем клиента... валим сервер killall-ом... дальше начинается кино. Деструктор объекта сокет не отрабатывает, порт висит занятым еще сек 10-20, пока не стухнет по таймату (видимо). При попытке послать сигнал 2 (аналог Ctrl-C) ничего не происходит, сервер его тупо игнорирует (нет консоли что ли)? На все остальные сигналы тоже в обще плюет, кроме 9 и 15. Попытка явно повесить что то внятное на какой сигнал ни к чему не приводят - если вешаем метод close или shutdown вылетает сообщение
socket.error: (4, 'Interrupted system call')
и порт все равно остается занятым, если вешаем sys.exit() ничего не вылетает но порт все равно занят.
В общем вопрос - как корректно прибить снаружи сокет, который висит на методе accept? С консоли это делается Ctrl-C, но тут похоже он консоли то не видит...
Пока что я в баше сначала тупо жду освобождения порта, но это мягко говоря неудобно.