#python #sockets #server #shutdown
Вопрос:
Я создаю сервер сокетов на python
s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind("127.0.0.1", 9001)
s.listen(5)
При подключении клиента с помощью socket.connect() Я могу подключиться и закрыть клиентское соединение. Но я не могу закрыть сервер с помощью ctrl c или прерывания клавиатуры с помощью s.shutdown(socket.SOL_RDWR)
Есть ли способ отключить сервер сокетов python с помощью keyinterrupt или программно?
Обновить:
s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.listen(5)
while True and s:
conn, addr = s.accept()
conn.recv(1024).decode()
conn.send("Test message from server".encode())
conn.close()
# Position 4 Signal Here
Обновление 2:
Я попытался сделать это в цикле выше в позиции 4 «# Сигнал позиции 4 здесь». Это не сработало
import sys
import signal
def signal_handler(signal, frame):
sys.exit(1)
signal.signal(signal.SIGINT, signal_handler)
Обновить:
0$: Это ОС Windows 10
Комментарии:
1. Вы, вероятно, захотите изучить возможность регистрации обработчика сигналов. Это должно помочь вам начать devdungeon.com/content/python-catch-sigint-ctrl-c . Это, вероятно, связано с операционной системой, поэтому вы должны пометить свой вопрос ОС.
2. Сокет прослушивателя недоступен
shutdown
. Вы можете использовать толькоshutdown
подключенный сокет, т. е. то, что вы получаете после звонкаaccept
. Если процесс завершается (что происходит после Ctrl C), сокет сервера также неявно закрывается и больше не слушает.3. Вам следует попробовать закрыть прослушивающую розетку.
4. Да, я действительно пытался закрыть прослушивание сокета, но это не сработало. @пользователь207421
5. @Gary: «Это программа на 200 строк» — тогда, пожалуйста, сократите ее до минимума, необходимого для воспроизведения проблемы. Пожалуйста, помните, что именно вам нужна помощь, поэтому ожидается, что вы потратите время на то, чтобы сделать помощь возможной.