Не удается закрыть сервер сокетов python с помощью keyinterrupt или программным способом

#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 строк» — тогда, пожалуйста, сократите ее до минимума, необходимого для воспроизведения проблемы. Пожалуйста, помните, что именно вам нужна помощь, поэтому ожидается, что вы потратите время на то, чтобы сделать помощь возможной.