diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-05-23 22:19:37 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-05-23 22:19:37 +0200 |
commit | a68d976b666a5097585cf221f4f8d793f90f3464 (patch) | |
tree | 66585e61ec97ecbcf9107f17cad79a7075b400cf | |
parent | fb729425dcd80b8ef34c075867d2f204bc4d55cb (diff) | |
download | guix-a68d976b666a5097585cf221f4f8d793f90f3464.tar guix-a68d976b666a5097585cf221f4f8d793f90f3464.tar.gz |
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'.
-rw-r--r-- | guix/build/download.scm | 2 | ||||
-rw-r--r-- | guix/http-client.scm | 12 |
2 files changed, 12 insertions, 2 deletions
diff --git a/guix/build/download.scm b/guix/build/download.scm index 5d881b93ee..d98933a907 100644 --- a/guix/build/download.scm +++ b/guix/build/download.scm @@ -167,8 +167,6 @@ which is not available during bootstrap." ;; Buffer input and output on this port. (setvbuf s _IOFBF) - ;; Enlarge the receive buffer. - (setsockopt s SOL_SOCKET SO_RCVBUF (* 12 1024)) (if (eq? 'https (uri-scheme uri)) (tls-wrap s) diff --git a/guix/http-client.scm b/guix/http-client.scm index 1f05df4b05..4770628e45 100644 --- a/guix/http-client.scm +++ b/guix/http-client.scm @@ -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)) "Return an open port for URI. When BUFFERED? is false, the returned port is 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))) + ;; Work around <http://bugs.gnu.org/15368> by restoring a decent + ;; buffer size. + (setsockopt s SOL_SOCKET SO_RCVBUF buffer-size) (unless buffered? (setvbuf s _IONBF)) s)) |