SVN / public / code / lecture-09 / search_server.py

Revision 1810
Date2025-12-16T16:13:21+01:00
Committerhb1003
Download
"""
Copyright 2025, University of Freiburg,
Chair of Algorithms and Data Structures.
Hannah Bast <bast@cs.uni-freiburg.de>
"""

import argparse
import socket
from pathlib import Path


class SearchServer:
    """
    A very simple HTTP search server.
    """

    def __init__(self, port: int):
        """
        Initialize with given port.
        """
        self.port = port

    def run(self):
        """
        Run the server loop: create a socket, and then, in an infinite loop,
        wait for requests and do something with them.
        """
        # Create server socket using IPv4 addresses and TCP.
        server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # Allow reuse of port if we start program again after a crash.
        server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        # Say on which machine and port we want to listen for connections.
        server_address = ("0.0.0.0", self.port)
        server_socket.bind(server_address)
        # Start listening
        server_socket.listen()

if __name__ == "__main__":
    # Parse command line arguments.
    parser = argparse.ArgumentParser()
    parser.add_argument("port", type=int, help="port to listen on")
    args = parser.parse_args()

    # Create and run server.
    server = SearchServer(args.port)
    server.run()