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,11 +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
-
236
- 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
+ )
237
236
self ._query_id = 0 # Request ID.
238
237
self ._query_length = 0 # Length of last query.
239
238
@@ -251,31 +250,29 @@ def gethostbyname(self, hostname: bytes) -> Union[int, bytes]:
251
250
self ._query_id , self ._query_length , buffer = _build_dns_query (hostname )
252
251
253
252
# Send DNS request packet
254
- self ._sock .bind (("" , _DNS_PORT ))
255
- self ._sock .connect ((self ._dns_server , _DNS_PORT ))
253
+ dns_socket = self ._iface .get_socket ()
254
+ self ._iface .socket_connect (
255
+ dns_socket , bytes (self ._dns_server ), _DNS_PORT , conn_mode = 0x02
256
+ )
256
257
_debug_print (debug = self ._debug , message = "* DNS: Sending request packet..." )
257
- self ._sock . send ( buffer )
258
+ self ._iface . socket_write ( dns_socket , buffer )
258
259
259
260
# Read and parse the DNS response
260
261
ipaddress = - 1
261
262
for _ in range (5 ):
262
263
# wait for a response
263
264
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
- )
265
+ while not self ._iface .socket_available (dns_socket , 0x02 ):
269
266
if time .monotonic () > socket_timeout :
270
267
_debug_print (
271
268
debug = self ._debug ,
272
269
message = "* DNS ERROR: Did not receive DNS response (socket timeout)." ,
273
270
)
274
- self ._sock . close ( )
275
- return - 1
271
+ self ._iface . socket_close ( dns_socket )
272
+ raise RuntimeError ( "Failed to resolve hostname!" )
276
273
time .sleep (0.05 )
277
274
# recv packet into buf
278
- buffer = self ._sock . recv ( 512 ) # > UDP payload length
275
+ _ , buffer = self ._iface . read_udp ( dns_socket , 512 )
279
276
_debug_print (
280
277
debug = self ._debug ,
281
278
message = "DNS Packet Received: {}" .format (buffer ),
@@ -294,5 +291,5 @@ def gethostbyname(self, hostname: bytes) -> Union[int, bytes]:
294
291
message = "* DNS ERROR: Failed to resolve DNS response, retrying…\n "
295
292
" ({})." .format (error .args [0 ]),
296
293
)
297
- self ._sock . close ( )
294
+ self ._iface . socket_close ( dns_socket )
298
295
return ipaddress
0 commit comments