From 1edf5226dc19b2b5c832e8ac31790d522c6898d1 Mon Sep 17 00:00:00 2001 From: MuedeHydra Date: Mon, 24 Nov 2025 18:39:13 +0100 Subject: [PATCH] fix server close --- server.py | 56 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/server.py b/server.py index 32e5c0b..b6ed861 100644 --- a/server.py +++ b/server.py @@ -1,13 +1,18 @@ import socket import threading +import select class Connection: sock="" addr=0 -HOST = "127.0.0.1" # Standard loopback interface address (localhost) +if 1: + HOST = "0.0.0.0" # open to network +else: + HOST = "127.0.0.1" # Standard loopback interface address (localhost) PORT = 65432 # Port to listen on (non-privileged ports are > 1023) clients=0 +run = True connections=[] def send_message(conn, data): @@ -17,24 +22,35 @@ def send_message(conn, data): def handle_connection(conn): with conn.sock: - while True: - data = conn.sock.recv(1024) - if data: - send_message(conn, data) - else: - print(f"Disconnected: {conn.addr}") - connections.remove(conn) - break + while run: + ready_to_read, _, _ = select.select([conn.sock], [], [], 1.0) + if ready_to_read: + data = conn.sock.recv(1024) + if data: + send_message(conn, data) + else: + print(f"Disconnected: {conn.addr}") + connections.remove(conn) + break -with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - try: - s.bind((HOST, PORT)) - while True: - conn=Connection() - s.listen() - conn.sock, conn.addr = s.accept() - connections.append(conn) - threading.Thread(target=handle_connection, args=(conn,)).start() - except KeyboardInterrupt: - print("Shutdown server") + +if __name__ == "__main__": + hostname = socket.gethostname() + IPAddr = socket.gethostbyname(hostname) + + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + try: + s.bind((HOST, PORT)) + print(f"Server {hostname} on ip {IPAddr}") + while run: + conn=Connection() + s.listen() + conn.sock, conn.addr = s.accept() + connections.append(conn) + threading.Thread(target=handle_connection, args=(conn,)).start() + except KeyboardInterrupt: + run = False + print("Shutdown server") + finally: + s.close()