From 3c738d6bd879aa884be0e40e631a36570e8f0d03 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 17 Dec 2012 00:14:30 +0100 Subject: download: Correctly detect "No route to host" conditions. * guix/build/download.scm (open-connection-for-uri): Delete addrinfos with the same address. Always open SOCK_STREAM/IPPROTO_IP sockets. Fix the error handler's condition to determine what to do. Reported by Nikita Karetnikov at . --- guix/build/download.scm | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'guix') diff --git a/guix/build/download.scm b/guix/build/download.scm index c09351cee4..074315cc9f 100644 --- a/guix/build/download.scm +++ b/guix/build/download.scm @@ -60,15 +60,18 @@ which is not available during bootstrap." ((http) 80) ; /etc/services, not for me! (else (error "unsupported URI scheme" uri)))))) - (getaddrinfo (uri-host uri) - (number->string port) - AI_NUMERICSERV))) + (delete-duplicates (getaddrinfo (uri-host uri) + (number->string port) + AI_NUMERICSERV) + (lambda (ai1 ai2) + (equal? (addrinfo:addr ai1) + (addrinfo:addr ai2)))))) (let loop ((addresses addresses)) (let* ((ai (car addresses)) (s (with-fluids ((%default-port-encoding #f)) - (socket (addrinfo:fam ai) (addrinfo:socktype ai) - (addrinfo:protocol ai))))) + ;; Restrict ourselves to TCP. + (socket (addrinfo:fam ai) SOCK_STREAM IPPROTO_IP)))) (catch 'system-error (lambda () (connect s (addrinfo:addr ai)) @@ -81,7 +84,7 @@ which is not available during bootstrap." (lambda args ;; Connection failed, so try one of the other addresses. (close s) - (if (null? addresses) + (if (null? (cdr addresses)) (apply throw args) (loop (cdr addresses)))))))) -- cgit v1.2.3