download: Enlarge your receive buffer.
* guix/build/download.scm (open-connection-for-uri): Remove call to 'setsockopt'. * guix/http-client.scm (open-socket-for-uri)[rmem-max, buffer-size]: New variables. Add call to 'setsockopt'.
This commit is contained in:
parent
fb729425dc
commit
a68d976b66
|
@ -167,8 +167,6 @@ which is not available during bootstrap."
|
||||||
|
|
||||||
;; Buffer input and output on this port.
|
;; Buffer input and output on this port.
|
||||||
(setvbuf s _IOFBF)
|
(setvbuf s _IOFBF)
|
||||||
;; Enlarge the receive buffer.
|
|
||||||
(setsockopt s SOL_SOCKET SO_RCVBUF (* 12 1024))
|
|
||||||
|
|
||||||
(if (eq? 'https (uri-scheme uri))
|
(if (eq? 'https (uri-scheme uri))
|
||||||
(tls-wrap s)
|
(tls-wrap s)
|
||||||
|
|
|
@ -162,7 +162,19 @@ closed it will also close PORT, unless the KEEP-ALIVE? is true."
|
||||||
(define* (open-socket-for-uri uri #:key (buffered? #t))
|
(define* (open-socket-for-uri uri #:key (buffered? #t))
|
||||||
"Return an open port for URI. When BUFFERED? is false, the returned port is
|
"Return an open port for URI. When BUFFERED? is false, the returned port is
|
||||||
unbuffered."
|
unbuffered."
|
||||||
|
(define rmem-max
|
||||||
|
;; The maximum size for a receive buffer on Linux, see socket(7).
|
||||||
|
"/proc/sys/net/core/rmem_max")
|
||||||
|
|
||||||
|
(define buffer-size
|
||||||
|
(if (file-exists? rmem-max)
|
||||||
|
(call-with-input-file rmem-max read)
|
||||||
|
126976)) ; the default for Linux, per 'rmem_default'
|
||||||
|
|
||||||
(let ((s ((@ (web client) open-socket-for-uri) uri)))
|
(let ((s ((@ (web client) open-socket-for-uri) uri)))
|
||||||
|
;; Work around <http://bugs.gnu.org/15368> by restoring a decent
|
||||||
|
;; buffer size.
|
||||||
|
(setsockopt s SOL_SOCKET SO_RCVBUF buffer-size)
|
||||||
(unless buffered?
|
(unless buffered?
|
||||||
(setvbuf s _IONBF))
|
(setvbuf s _IONBF))
|
||||||
s))
|
s))
|
||||||
|
|
Loading…
Reference in New Issue