Не получается закрыть основной поток от сокета с тредами

Вырубаю все дочерные потоки при помощи signal, однако не получается закрыть основной поток в сокет сервере.

Код:

import socket
import threading
import signal

HEADER_SIZE = 10

sock_serv = socket.socket()
sock_serv.bind(('localhost', 444))
sock_serv.listen(5)
exit_event = threading.Event()

def client_handler(conn):
    full_message = b''
    while True:
        data = conn.recv(10)
        full_message += data
        if exit_event.is_set():
            break
        # когда приехал полный заголовок
        if len(full_message) >= 10:
            # декодирум длину из заголовка и получаем полный размер пакета
            msg_len = HEADER_SIZE + int(full_message[:HEADER_SIZE])
            # набежал ли полный пакет?
            if len(full_message) >= msg_len:
                # выдираем из него данные
                payload = full_message[HEADER_SIZE:msg_len]
                if payload.decode('utf-8') == '!exit':
                    conn.close()
                    break
                print(payload.decode('utf-8'))
                # удаляем пакет из буфера и суем в него всё что после
                full_message = full_message[msg_len:]



def signal_handler():
    exit_event.set()
signal.signal(signal.SIGINT, signal_handler)
while True:
    connection, address = sock_serv.accept()
    if exit_event.is_set():
        break
    if connection:
        print(f'Got connection from {address}')
        threading.Thread(target=client_handler, args=(connection,), daemon=True).start()

Ответы (0 шт):