import threading import socket import logging import os import config from .http_handler import HTTPHandler log = logging.getLogger(__name__) def init_server_socket(server_handler): assert server_handler == HTTPHandler, "Server handler isn't Handler type" try: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as main_server_socket: log.debug("Set socket option REUSEADDR to True") main_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) log.info("Attempt to bind socket to 0.0.0.0:%d", config.SETUP["server"]["port"]) main_server_socket.bind(("0.0.0.0", config.SETUP["server"]["port"])) log.debug("Make socket to listen") main_server_socket.listen() while True: conn, addr = main_server_socket.accept() log.info("Accept connection from %s", addr[0]) thr_serv_conn = threading.Thread(target=server_handler, args=(conn, addr,), daemon=True) thr_serv_conn.start() except KeyboardInterrupt: log.info("Server get keyboard interrupt, bye!")