Skip to content

Commit 5f8ec34

Browse files
committed
Retry sending DNS packets when no response is received.
1 parent 0e5c891 commit 5f8ec34

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

net/ethernet.lisp

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,20 +1333,21 @@ the seperator character."
13331333
(reverse additional-records)))))
13341334

13351335
(defun dns-request (domain)
1336-
(dolist (server *dns-servers*)
1337-
(let ((id (random (expt 2 16))))
1338-
(with-udp-connection (conn server +dns-port+)
1339-
(send (build-dns-packet id +dns-standard-query+
1340-
:questions `((,domain :a :in)))
1341-
conn)
1342-
(let ((response (receive conn 15)))
1343-
(when response
1344-
(multiple-value-bind (rx-id flags questions answers authority-rrs additional-rrs)
1345-
(decode-dns-packet response)
1346-
(when (eql rx-id id)
1347-
(dolist (a answers)
1348-
(when (eql (second a) :a)
1349-
(return-from dns-request (fifth a))))))))))))
1336+
(dotimes (i 3) ; UDP is unreliable.
1337+
(dolist (server *dns-servers*)
1338+
(let ((id (random (expt 2 16))))
1339+
(with-udp-connection (conn server +dns-port+)
1340+
(send (build-dns-packet id +dns-standard-query+
1341+
:questions `((,domain :a :in)))
1342+
conn)
1343+
(let ((response (receive conn 10)))
1344+
(when response
1345+
(multiple-value-bind (rx-id flags questions answers authority-rrs additional-rrs)
1346+
(decode-dns-packet response)
1347+
(when (eql rx-id id)
1348+
(dolist (a answers)
1349+
(when (eql (second a) :a)
1350+
(return-from dns-request (fifth a)))))))))))))
13501351

13511352
;;; High-level address resolution.
13521353

0 commit comments

Comments
 (0)