summary refs log tree commit diff
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)
downloadguix-8c95b27ce6f2b5f067efa3c0911eb678ee211937.tar.gz
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)