2023-12-29 02:13:10 +03:00
|
|
|
import threading
|
2023-12-22 02:48:34 +03:00
|
|
|
import socket
|
|
|
|
import logging
|
2024-06-04 17:25:11 +03:00
|
|
|
import os
|
2023-12-22 02:48:34 +03:00
|
|
|
|
2023-12-29 02:13:10 +03:00
|
|
|
import config
|
|
|
|
|
2024-10-05 18:15:43 +03:00
|
|
|
from .http_handler import HTTPHandler
|
|
|
|
|
2023-12-22 02:48:34 +03:00
|
|
|
|
2024-07-03 14:06:19 +03:00
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
2023-12-22 02:48:34 +03:00
|
|
|
|
2024-10-03 14:50:42 +03:00
|
|
|
def init_server_socket(server_handler):
|
2024-10-05 18:15:43 +03:00
|
|
|
assert server_handler == HTTPHandler, "Server handler isn't Handler type"
|
|
|
|
|
2023-12-29 02:13:10 +03:00
|
|
|
try:
|
|
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as main_server_socket:
|
2024-10-09 14:31:57 +03:00
|
|
|
log.debug("Set socket option REUSEADDR to True")
|
2023-12-29 02:13:10 +03:00
|
|
|
main_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
|
2024-10-09 14:31:57 +03:00
|
|
|
|
|
|
|
log.info("Attempt to bind socket to 0.0.0.0:%d", config.SETUP["server"]["port"])
|
2023-12-29 02:13:10 +03:00
|
|
|
main_server_socket.bind(("0.0.0.0", config.SETUP["server"]["port"]))
|
2024-10-09 14:31:57 +03:00
|
|
|
|
|
|
|
log.debug("Make socket to listen")
|
2023-12-29 02:13:10 +03:00
|
|
|
main_server_socket.listen()
|
|
|
|
|
|
|
|
while True:
|
|
|
|
conn, addr = main_server_socket.accept()
|
2024-10-09 14:31:57 +03:00
|
|
|
log.info("Accept connection from %s", addr[0])
|
2023-12-22 02:48:34 +03:00
|
|
|
|
2024-10-03 14:50:42 +03:00
|
|
|
thr_serv_conn = threading.Thread(target=server_handler, args=(conn, addr,), daemon=True)
|
2024-10-08 13:54:15 +03:00
|
|
|
thr_serv_conn.start()
|
2023-12-22 02:48:34 +03:00
|
|
|
|
2023-12-29 02:13:10 +03:00
|
|
|
except KeyboardInterrupt:
|
2024-10-03 14:26:15 +03:00
|
|
|
log.info("Server get keyboard interrupt, bye!")
|