31 lines
929 B
Python
31 lines
929 B
Python
import socket
|
|
import threading
|
|
import traceback
|
|
from typing import Callable
|
|
|
|
from .logger import log
|
|
|
|
def serve(address: str, port: int, callback: Callable, wrapper: Callable[[socket.socket], socket.socket] = lambda s: s) -> None:
|
|
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
log.info(f'server started on {port}')
|
|
try:
|
|
server_socket.bind((address, port))
|
|
server_socket.listen(1)
|
|
server_socket = wrapper(server_socket)
|
|
|
|
while True:
|
|
try:
|
|
conn, addr = server_socket.accept()
|
|
client_connection = threading.Thread(target=callback, args=(conn, addr))
|
|
client_connection.start()
|
|
|
|
except Exception:
|
|
log.warn(traceback.format_exc())
|
|
|
|
except:
|
|
log.critical(traceback.format_exc())
|
|
|
|
finally:
|
|
server_socket.close()
|
|
log.info(f'server on {port} shut down')
|