diff --git a/adafruit_httpserver/server.py b/adafruit_httpserver/server.py index fbf3d0c..f103b2c 100644 --- a/adafruit_httpserver/server.py +++ b/adafruit_httpserver/server.py @@ -210,9 +210,15 @@ def start(self, host: str, port: int = 80) -> None: self._sock = self._socket_source.socket( self._socket_source.AF_INET, self._socket_source.SOCK_STREAM ) - self._sock.bind((host, port)) - self._sock.listen(10) - self._sock.setblocking(False) # Non-blocking socket + try: + # Only for CPython, prevents "Address already in use" error + self._sock.setsockopt( + self._socket_source.SOL_SOCKET, self._socket_source.SO_REUSEADDR, 1 + ) + finally: + self._sock.bind((host, port)) + self._sock.listen(10) + self._sock.setblocking(False) # Non-blocking socket if self.debug: _debug_started_server(self) diff --git a/examples/httpserver_cpython.py b/examples/httpserver_cpython.py index 48466f1..292b931 100644 --- a/examples/httpserver_cpython.py +++ b/examples/httpserver_cpython.py @@ -19,5 +19,6 @@ def base(request: Request): return Response(request, "Hello from the CircuitPython HTTP Server!") -# runs on port 5000; ports < 1024 require sudo. +# Ports below 1024 are reserved for root user only. +# If you want to run this example on a port below 1024, you need to run it as root (or with `sudo`). server.serve_forever("0.0.0.0", 5000)