Skip to content

Commit 3818dfd

Browse files
gijzelaerrclaude
andcommitted
Add SO_REUSEPORT socket option for faster port reuse in tests
On Linux/macOS, SO_REUSEPORT allows multiple sockets to bind to the same port, which helps prevent "Address already in use" errors when tests run in quick succession and ports are still in TIME_WAIT state. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
1 parent 11179d4 commit 3818dfd

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

snap7/partner.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,9 @@ def _start_listening(self) -> None:
535535
"""Start listening for incoming connections (passive mode)."""
536536
self._server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
537537
self._server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
538+
# Try to use SO_REUSEPORT if available (Linux, macOS) for faster port reuse
539+
if hasattr(socket, "SO_REUSEPORT"):
540+
self._server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
538541
self._server_socket.bind((self.local_ip, self.port))
539542
self._server_socket.listen(1)
540543
self._server_socket.settimeout(1.0) # Allow periodic check

snap7/server.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ def start(self, tcp_port: int = 102) -> int:
120120
self.port = tcp_port
121121
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
122122
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
123+
# Try to use SO_REUSEPORT if available (Linux, macOS) for faster port reuse
124+
if hasattr(socket, "SO_REUSEPORT"):
125+
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
123126

124127
try:
125128
self.server_socket.bind((self.host, self.port))

0 commit comments

Comments
 (0)