added windows support to dns-find-nameserver

original commit: 2b67432b43888c7c93f5384616a5bb2defba7170
This commit is contained in:
Eli Barzilay 2004-10-18 20:39:12 +00:00
parent bdeea7c188
commit d3f8bb4d7d

View File

@ -321,18 +321,35 @@
(define (dns-find-nameserver)
(case (system-type)
[(unix macosx)
[(unix macosx)
(with-handlers ([void (lambda (x) #f)])
(with-input-from-file "/etc/resolv.conf"
(lambda ()
(let loop ()
(let ([l (read-line)])
(or (and (string? l)
(let ([m (regexp-match
(let ([m (regexp-match
(format "nameserver[ ~a]+([0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)" #\tab)
l)])
(and m (cadr m))))
(and (not (eof-object? l))
(loop))))))))]
[(windows)
(let ([nslookup (find-executable-path "nslookup.exe" #f)])
(and nslookup
(let-values ([(p pout pin perr)
(subprocess
#f (open-input-file "NUL") (current-error-port)
nslookup)])
(let loop ([dns #f])
(let ([line (read-line pout 'any)])
(cond [(eof-object? line)
(subprocess-wait p)
dns]
[(and (not dns)
(regexp-match #rx"^Default Server: +(.*)$"
line))
=> (lambda (m) (loop (cadr m)))]
[else (loop dns)]))))))]
[else #f])))))