Skip to content

Commit 2ba7082

Browse files
authored
Merge pull request #39 from obaltzer/open-udp-server-socket
UDP server requires opening socket on chip during bind
2 parents d50fe38 + d0887c3 commit 2ba7082

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

adafruit_wiznet5k/adafruit_wiznet5k.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ def remote_ip(self, socket_num):
315315

316316
@property
317317
def link_status(self):
318-
""""Returns if the PHY is connected."""
318+
""" "Returns if the PHY is connected."""
319319
if self._chip_type == "w5500":
320320
data = self.read(REG_PHYCFGR, 0x00)
321321
return data[0] & 0x01
@@ -553,10 +553,11 @@ def get_socket(self):
553553
print("Allocated socket #{}".format(sock))
554554
return sock
555555

556-
def socket_listen(self, socket_num, port):
557-
"""Start listening on a socket (TCP mode only).
556+
def socket_listen(self, socket_num, port, conn_mode=SNMR_TCP):
557+
"""Start listening on a socket (default TCP mode).
558558
:parm int socket_num: socket number
559559
:parm int port: port to listen on
560+
:parm int conn_mode: connection mode SNMR_TCP (default) or SNMR_UDP
560561
"""
561562
assert self.link_status, "Ethernet cable disconnected!"
562563
if self._debug:
@@ -567,15 +568,15 @@ def socket_listen(self, socket_num, port):
567568
)
568569
# Initialize a socket and set the mode
569570
self.src_port = port
570-
res = self.socket_open(socket_num, conn_mode=SNMR_TCP)
571+
res = self.socket_open(socket_num, conn_mode=conn_mode)
571572
self.src_port = 0
572573
if res == 1:
573574
raise RuntimeError("Failed to initalize the socket.")
574575
# Send listen command
575576
self._send_socket_cmd(socket_num, CMD_SOCK_LISTEN)
576577
# Wait until ready
577578
status = [SNSR_SOCK_CLOSED]
578-
while status[0] not in (SNSR_SOCK_LISTEN, SNSR_SOCK_ESTABLISHED):
579+
while status[0] not in (SNSR_SOCK_LISTEN, SNSR_SOCK_ESTABLISHED, SNSR_SOCK_UDP):
579580
status = self._read_snsr(socket_num)
580581
if status[0] == SNSR_SOCK_CLOSED:
581582
raise RuntimeError("Listening socket closed.")

adafruit_wiznet5k/adafruit_wiznet5k_socket.py

+7
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,13 @@ def bind(self, address):
181181
if ip_address != current_ip:
182182
_the_interface.ifconfig = (ip_address, subnet_mask, gw_addr, dns)
183183
self._listen_port = address[1]
184+
# For UDP servers we need to open the socket here because we won't call
185+
# listen
186+
if self._sock_type == SOCK_DGRAM:
187+
_the_interface.socket_listen(
188+
self.socknum, self._listen_port, wiznet5k.adafruit_wiznet5k.SNMR_UDP
189+
)
190+
self._buffer = b""
184191

185192
def listen(self, backlog=None):
186193
"""Listen on the port specified by bind.

0 commit comments

Comments
 (0)