Использую блокирующие сокеты вместе с потоками, вроде бы работает, но завершить такую программу получается только с помощью команды kill. По Ctrl + C она не завершается, так как другой поток всё ещё выполняет recv() на сокете. Пробовал ловить KeyboardInterrupt и вызывать thread.sock.close(), но сокет замечает это лишь когда туда приходят новые данные.