Skip to content

Commit 4f31799

Browse files
authored
Merge pull request #79 from michalpokusa/cpython-fix
Fix for CPython "Adress already in use" error
2 parents af0a0bd + 145a095 commit 4f31799

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

adafruit_httpserver/server.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,15 @@ def start(self, host: str, port: int = 80) -> None:
210210
self._sock = self._socket_source.socket(
211211
self._socket_source.AF_INET, self._socket_source.SOCK_STREAM
212212
)
213-
self._sock.bind((host, port))
214-
self._sock.listen(10)
215-
self._sock.setblocking(False) # Non-blocking socket
213+
try:
214+
# Only for CPython, prevents "Address already in use" error
215+
self._sock.setsockopt(
216+
self._socket_source.SOL_SOCKET, self._socket_source.SO_REUSEADDR, 1
217+
)
218+
finally:
219+
self._sock.bind((host, port))
220+
self._sock.listen(10)
221+
self._sock.setblocking(False) # Non-blocking socket
216222

217223
if self.debug:
218224
_debug_started_server(self)

examples/httpserver_cpython.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ def base(request: Request):
1919
return Response(request, "Hello from the CircuitPython HTTP Server!")
2020

2121

22-
# runs on port 5000; ports < 1024 require sudo.
22+
# Ports below 1024 are reserved for root user only.
23+
# If you want to run this example on a port below 1024, you need to run it as root (or with `sudo`).
2324
server.serve_forever("0.0.0.0", 5000)

0 commit comments

Comments
 (0)