26
26
import time
27
27
from random import getrandbits
28
28
from micropython import const
29
- import adafruit_wiznet5k .adafruit_wiznet5k_socket as socket
30
29
31
30
_QUERY_FLAG = const (0x00 )
32
31
_OPCODE_STANDARD_QUERY = const (0x00 )
@@ -229,10 +228,11 @@ def __init__(
229
228
"""
230
229
self ._debug = debug
231
230
self ._iface = iface
232
- socket .set_interface (iface )
233
- self ._sock = socket .socket (type = socket .SOCK_DGRAM )
234
- self ._sock .settimeout (1 )
235
- self ._dns_server = dns_address
231
+ self ._dns_server = (
232
+ self ._iface .unpretty_ip (dns_address )
233
+ if isinstance (dns_address , str )
234
+ else dns_address
235
+ )
236
236
self ._query_id = 0 # Request ID.
237
237
self ._query_length = 0 # Length of last query.
238
238
@@ -251,31 +251,29 @@ def gethostbyname(self, hostname: bytes) -> Union[int, bytes]:
251
251
self ._query_id , self ._query_length , buffer = _build_dns_query (hostname )
252
252
253
253
# Send DNS request packet
254
- self ._sock .bind (("" , _DNS_PORT ))
255
- self ._sock .connect ((self ._dns_server , _DNS_PORT ))
254
+ dns_socket = self ._iface .get_socket ()
255
+ self ._iface .socket_connect (
256
+ dns_socket , bytes (self ._dns_server ), _DNS_PORT , conn_mode = 0x02
257
+ )
256
258
_debug_print (debug = self ._debug , message = "* DNS: Sending request packet..." )
257
- self ._sock . send ( buffer )
259
+ self ._iface . socket_write ( dns_socket , buffer )
258
260
259
261
# Read and parse the DNS response
260
262
ipaddress = - 1
261
263
for _ in range (5 ):
262
264
# wait for a response
263
265
socket_timeout = time .monotonic () + 1.0
264
- packet_size = self ._sock ._available () # pylint: disable=protected-access
265
- while packet_size == 0 :
266
- packet_size = (
267
- self ._sock ._available () # pylint: disable=protected-access
268
- )
266
+ while not self ._iface .socket_available (dns_socket , 0x02 ):
269
267
if time .monotonic () > socket_timeout :
270
268
_debug_print (
271
269
debug = self ._debug ,
272
270
message = "* DNS ERROR: Did not receive DNS response (socket timeout)." ,
273
271
)
274
- self ._sock . close ( )
275
- return - 1
272
+ self ._iface . socket_close ( dns_socket )
273
+ raise RuntimeError ( "Failed to resolve hostname!" )
276
274
time .sleep (0.05 )
277
275
# recv packet into buf
278
- buffer = self ._sock . recv ( 512 ) # > UDP payload length
276
+ _ , buffer = self ._iface . read_udp ( dns_socket , 512 )
279
277
_debug_print (
280
278
debug = self ._debug ,
281
279
message = "DNS Packet Received: {}" .format (buffer ),
@@ -294,5 +292,5 @@ def gethostbyname(self, hostname: bytes) -> Union[int, bytes]:
294
292
message = "* DNS ERROR: Failed to resolve DNS response, retrying…\n "
295
293
" ({})." .format (error .args [0 ]),
296
294
)
297
- self ._sock . close ( )
295
+ self ._iface . socket_close ( dns_socket )
298
296
return ipaddress
0 commit comments