diff options
author | Robert Pluim <rpluim@gmail.com> | 2021-02-22 14:47:41 +0100 |
---|---|---|
committer | Robert Pluim <rpluim@gmail.com> | 2021-02-22 15:48:06 +0100 |
commit | 934dcc21572e3f0e5357d84050e04b23d41a18f9 (patch) | |
tree | 52065e4c4a6483d149a4abd47f947b981b1162c1 /lisp/net/dns.el | |
parent | 0c170c64b178da1df05d953d993e992b8bdc2502 (diff) | |
download | emacs-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.el | 23 |
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) |