Skip to content

Commit 3d96b1c

Browse files
author
BiffoBear
committed
Added release_socket() called to socket.close(), __exit__() and __del__ plus bug fixes.
1 parent 59da9fb commit 3d96b1c

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

adafruit_wiznet5k/adafruit_wiznet5k.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,13 @@ def __init__(
193193
self._ch_base_msb = 0
194194
if self._w5xxx_init() != 1:
195195
raise RuntimeError("Failed to initialize WIZnet module.")
196+
if self._chip_type == "w5100s":
197+
WIZNET5K._sockets_reserved = [False] * (_W5100_MAX_SOCK_NUM - 1)
198+
elif self._chip_type == "w5500":
199+
WIZNET5K._sockets_reserved = [False] * (_W5200_W5500_MAX_SOCK_NUM - 1)
200+
else:
201+
raise RuntimeError("Unrecognized chip type.")
202+
196203
# Set MAC address
197204
self.mac_address = mac
198205
self.src_port = 0
@@ -780,7 +787,7 @@ def release_socket(socket_number):
780787
781788
:param int socket_number: The socket to release.
782789
"""
783-
WIZNET5K._sockets_reserved[socket_number] = False
790+
WIZNET5K._sockets_reserved[socket_number - 1] = False
784791

785792
def socket_listen(
786793
self, socket_num: int, port: int, conn_mode: int = _SNMR_TCP

adafruit_wiznet5k/adafruit_wiznet5k_socket.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,14 +231,18 @@ def __init__(
231231
self._timeout = _default_socket_timeout
232232
self._listen_port = None
233233

234-
self._socknum = _the_interface.get_socket()
234+
self._socknum = _the_interface.get_socket(reserve_socket=True)
235235
if self._socknum == _SOCKET_INVALID:
236236
raise RuntimeError("Failed to allocate socket.")
237237

238+
def __del__(self):
239+
_the_interface.release_socket(self._socknum)
240+
238241
def __enter__(self):
239242
return self
240243

241244
def __exit__(self, exc_type, exc_val, exc_tb) -> None:
245+
_the_interface.release_socket(self._socknum)
242246
if self._sock_type == SOCK_STREAM:
243247
self._disconnect()
244248
stamp = time.monotonic()
@@ -601,6 +605,7 @@ def close(self) -> None:
601605
Mark the socket closed. Once that happens, all future operations on the socket object
602606
will fail. The remote end will receive no more data.
603607
"""
608+
_the_interface.release_socket(self._socknum)
604609
_the_interface.socket_close(self._socknum)
605610

606611
def _available(self) -> int:

0 commit comments

Comments
 (0)