summaryrefslogtreecommitdiff
path: root/lisp/net/dns.el
diff options
context:
space:
mode:
authorRobert Pluim <rpluim@gmail.com>2021-02-22 14:47:41 +0100
committerRobert Pluim <rpluim@gmail.com>2021-02-22 15:48:06 +0100
commit934dcc21572e3f0e5357d84050e04b23d41a18f9 (patch)
tree52065e4c4a6483d149a4abd47f947b981b1162c1 /lisp/net/dns.el
parent0c170c64b178da1df05d953d993e992b8bdc2502 (diff)
downloademacs-934dcc21572e3f0e5357d84050e04b23d41a18f9.tar.gz
Fix hang when running dns-query with no working internet
* lisp/net/dns.el (dns-set-servers): reduce the timeout and retry count when using 'nslookup' for "localhost". (dns-query): Check to see if we actually managed to initiate a dns request before starting a busy-wait for the result.
Diffstat (limited to 'lisp/net/dns.el')
-rw-r--r--lisp/net/dns.el23
1 files changed, 13 insertions, 10 deletions
diff --git a/lisp/net/dns.el b/lisp/net/dns.el
index 2045d4dfca1..90776e3c6f2 100644
--- a/lisp/net/dns.el
+++ b/lisp/net/dns.el
@@ -332,7 +332,7 @@ Parses \"/etc/resolv.conf\" or calls \"nslookup\"."
(setq dns-servers (nreverse dns-servers))))
(when (executable-find "nslookup")
(with-temp-buffer
- (call-process "nslookup" nil t nil "localhost")
+ (call-process "nslookup" nil t nil "-retry=0" "-timeout=2" "localhost")
(goto-char (point-min))
(when (re-search-forward
"^Address:[ \t]*\\([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\\|[[:xdigit:]:]*\\)" nil t)
@@ -492,19 +492,22 @@ If REVERSE, look up an IP address."
(dns-get-txt-answer (dns-get 'answers result))
(dns-get 'data answer))))))))))
+;;;###autoload
(defun dns-query (name &optional type full reverse)
"Query a DNS server for NAME of TYPE.
If FULL, return the entire record returned.
If REVERSE, look up an IP address."
- (let ((result nil))
- (dns-query-asynchronous
- name
- (lambda (response)
- (setq result (list response)))
- type full reverse)
- ;; Loop until we get the callback.
- (while (not result)
- (sleep-for 0.01))
+ (let* ((result nil)
+ (query-started
+ (dns-query-asynchronous
+ name
+ (lambda (response)
+ (setq result (list response)))
+ type full reverse)))
+ (if query-started
+ ;; Loop until we get the callback.
+ (while (not result)
+ (sleep-for 0.01)))
(car result)))
(provide 'dns)