Skip to content

Commit a465bb0

Browse files
committed
Split listen to bind/listen for compatibility, formatting fixes
- The socket now expects `bind`, then `listen` for improved compatibility with CPython socket. - Fixed formatting to make black happy, even did the extremely ugly thing on line 222 of adafruit_wiznet5k_socket.py.
1 parent f202273 commit a465bb0

File tree

3 files changed

+36
-26
lines changed

3 files changed

+36
-26
lines changed

adafruit_wiznet5k/adafruit_wiznet5k.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -574,9 +574,7 @@ def get_socket(self):
574574
sock = 0
575575
for _sock in range(self.max_sockets):
576576
status = self.socket_status(_sock)[0]
577-
if (status in
578-
(SNSR_SOCK_CLOSED, SNSR_SOCK_FIN_WAIT, SNSR_SOCK_CLOSE_WAIT)
579-
):
577+
if status in (SNSR_SOCK_CLOSED, SNSR_SOCK_FIN_WAIT, SNSR_SOCK_CLOSE_WAIT):
580578
sock = _sock
581579
break
582580

@@ -592,7 +590,7 @@ def socket_listen(self, socket_num, port):
592590
assert self.link_status, "Ethernet cable disconnected!"
593591
if self._debug:
594592
print(
595-
"* Listening on port={}, ip={}".format(
593+
"* Listening on port={}, ip={}".format(
596594
port, self.pretty_ip(self.ip_address)
597595
)
598596
)
@@ -610,7 +608,6 @@ def socket_listen(self, socket_num, port):
610608
if status[0] == SNSR_SOCK_CLOSED:
611609
raise RuntimeError("Listening socket closed.")
612610

613-
614611
def socket_open(self, socket_num, conn_mode=SNMR_TCP):
615612
"""Opens a TCP or UDP socket. By default, we use
616613
'conn_mode'=SNMR_TCP but we may also use SNMR_UDP.
@@ -757,8 +754,10 @@ def socket_write(self, socket_num, buffer):
757754
while (
758755
self._read_socket(socket_num, REG_SNIR)[0] & SNIR_SEND_OK
759756
) != SNIR_SEND_OK:
760-
if (self.socket_status(socket_num)[0] in
761-
(SNSR_SOCK_CLOSED, SNSR_SOCK_FIN_WAIT, SNSR_SOCK_CLOSE_WAIT)
757+
if self.socket_status(socket_num)[0] in (
758+
SNSR_SOCK_CLOSED,
759+
SNSR_SOCK_FIN_WAIT,
760+
SNSR_SOCK_CLOSE_WAIT,
762761
):
763762
# self.socket_close(socket_num)
764763
return 0

adafruit_wiznet5k/adafruit_wiznet5k_socket.py

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ def __init__(
120120
self._sock_type = type
121121
self._buffer = b""
122122
self._timeout = 0
123+
self._listen_port = None
123124

124125
self._socknum = _the_interface.get_socket()
125126

@@ -134,8 +135,7 @@ def connected(self):
134135
if self.socknum >= _the_interface.max_sockets:
135136
return False
136137
status = _the_interface.socket_status(self.socknum)[0]
137-
if (status == adafruit_wiznet5k.SNSR_SOCK_CLOSE_WAIT
138-
and self.available() == 0):
138+
if status == adafruit_wiznet5k.SNSR_SOCK_CLOSE_WAIT and self.available() == 0:
139139
result = False
140140
else:
141141
result = status not in (
@@ -162,11 +162,18 @@ def inet_aton(self, ip_string):
162162
self._buffer = bytearray(self._buffer)
163163
return self._buffer
164164

165-
def listen(self, port):
166-
"""Listen on the specified port.
167-
:param int port: The port to listen on.
165+
def bind(self, address):
166+
"""Bind the socket to the listen port, we ignore the host.
167+
:param tuple address: local socket as a (host, port) tuple, host is ignored.
168168
"""
169-
_the_interface.socket_listen(self.socknum, port)
169+
_, self._listen_port = address
170+
171+
def listen(self, backlog=None):
172+
"""Listen on the port specified by bind.
173+
:param backlog: For compatibility but ignored.
174+
"""
175+
assert self._listen_port is not None, "Use bind to set the port before listen!"
176+
_the_interface.socket_listen(self.socknum, self._listen_port)
170177
self._buffer = b""
171178

172179
def connect(self, address, conntype=None):
@@ -211,11 +218,11 @@ def recv(self, bufsize=0): # pylint: disable=too-many-branches
211218
avail = _the_interface.udp_remaining()
212219
if avail:
213220
if self._sock_type == SOCK_STREAM:
214-
self._buffer += _the_interface.socket_read(
215-
self.socknum, avail)[1]
221+
self._buffer += _the_interface.socket_read(self.socknum, avail)[
222+
1
223+
]
216224
elif self._sock_type == SOCK_DGRAM:
217-
self._buffer += _the_interface.read_udp(
218-
self.socknum, avail)[1]
225+
self._buffer += _the_interface.read_udp(self.socknum, avail)[1]
219226
else:
220227
break
221228
gc.collect()
@@ -237,10 +244,10 @@ def recv(self, bufsize=0): # pylint: disable=too-many-branches
237244
stamp = time.monotonic()
238245
if self._sock_type == SOCK_STREAM:
239246
recv = _the_interface.socket_read(
240-
self.socknum, min(to_read, avail))[1]
247+
self.socknum, min(to_read, avail)
248+
)[1]
241249
elif self._sock_type == SOCK_DGRAM:
242-
recv = _the_interface.read_udp(
243-
self.socknum, min(to_read, avail))[1]
250+
recv = _the_interface.read_udp(self.socknum, min(to_read, avail))[1]
244251
recv = bytes(recv)
245252
received.append(recv)
246253
to_read -= len(recv)
@@ -269,14 +276,16 @@ def readline(self):
269276
if self._sock_type == SOCK_STREAM:
270277
avail = self.available()
271278
if avail:
272-
self._buffer += _the_interface.socket_read(
273-
self.socknum, avail)[1]
279+
self._buffer += _the_interface.socket_read(self.socknum, avail)[1]
274280
elif self._sock_type == SOCK_DGRAM:
275281
avail = _the_interface.udp_remaining()
276282
if avail:
277283
self._buffer += _the_interface.read_udp(self.socknum, avail)
278-
if not avail and self._timeout > 0 and \
279-
time.monotonic() - stamp > self._timeout:
284+
if (
285+
not avail
286+
and self._timeout > 0
287+
and time.monotonic() - stamp > self._timeout
288+
):
280289
self.close()
281290
raise RuntimeError("Didn't receive response, failing out...")
282291
firstline, self._buffer = self._buffer.split(b"\r\n", 1)

adafruit_wiznet5k/adafruit_wiznet5k_wsgiserver.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ def start(self):
6969
"""
7070
for _ in range(MAX_SOCK_NUM):
7171
new_sock = socket.socket()
72-
new_sock.listen(self.port)
72+
new_sock.bind((None, self.port))
73+
new_sock.listen()
7374
self._client_sock.append(new_sock)
7475
if self._debug:
7576
ip = _the_interface.pretty_ip(_the_interface.ip_address)
@@ -89,7 +90,8 @@ def update_poll(self):
8990
self.finish_response(result, sock)
9091
self._client_sock.remove(sock)
9192
new_sock = socket.socket()
92-
new_sock.listen(self.port)
93+
new_sock.bind((None, self.port))
94+
new_sock.listen()
9395
add_sock.append(new_sock)
9496
self._client_sock.extend(add_sock)
9597

0 commit comments

Comments
 (0)