summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2013-07-04 22:49:00 +0200
committerLudovic Courtès <ludo@gnu.org>2013-07-04 22:49:00 +0200
commit8c95b27ce6f2b5f067efa3c0911eb678ee211937 (patch)
treebbcff2a6ce9336f8af70d312a98923527370f1b2
parent5363abb776e71de10545ac96112ff6e5cd4c1559 (diff)
store: Deal with unsupported `setsockopt' operation on GNU/Hurd.
* guix/store.scm (open-connection): Silently ignore ENOPROTOOPT on `setsockopt' calls, for the sake of GNU/Hurd. Reported by Matthew Lien <bluet@bluet.org> at <http://lists.gnu.org/archive/html/bug-guix/2013-07/msg00020.html>.
-rw-r--r--guix/store.scm11
1 files changed, 9 insertions, 2 deletions
diff --git a/guix/store.scm b/guix/store.scm
index 57e1ca06aa..343da91506 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -266,8 +266,15 @@ operate, should the disk become full. Return a server object."
(socket PF_UNIX SOCK_STREAM 0)))
(a (make-socket-address PF_UNIX file)))
- ;; Enlarge the receive buffer.
- (setsockopt s SOL_SOCKET SO_RCVBUF (* 12 1024))
+ (catch 'system-error
+ (lambda ()
+ ;; Enlarge the receive buffer.
+ (setsockopt s SOL_SOCKET SO_RCVBUF (* 12 1024)))
+ (lambda args
+ ;; On the Hurd, the pflocal server's implementation of `socket_setopt'
+ ;; always returns ENOPROTOOPT. Ignore it.
+ (unless (= (system-error-errno args) ENOPROTOOPT)
+ (apply throw args))))
(catch 'system-error
(cut connect s a)