@@ -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