[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: sockets availability during build
From: |
Ludovic Courtès |
Subject: |
Re: sockets availability during build |
Date: |
Fri, 23 Jan 2015 22:31:16 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux) |
Federico Beffa <address@hidden> skribis:
> The error is produced by the system call "setsockopt". Here is the
> part of the strace log showing the error:
[...]
> socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 9
> setsockopt(9, SOL_IP, IP_MULTICAST_TTL, "\4", 1) = 0
> fcntl(9, F_GETFL) = 0x2 (flags O_RDWR)
> fcntl(9, F_SETFL, O_RDWR|O_NONBLOCK) = 0
> socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 10
> setsockopt(10, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
> bind(10, {sa_family=AF_INET, sin_port=htons(1900),
> sin_addr=inet_addr("0.0.0.0")}, 16) = 0
> setsockopt(10, SOL_IP, IP_ADD_MEMBERSHIP, "\357\377\377\372\0\0\0\0",
> 8) = -1 ENODEV (No such device)
[...]
> From the above I understand that libupnp embedded server wants to
> setup multicast, but, as far as I know, this doesn't work with the
> "lo" interface and fails. I do not see a workaround. Anyone?
Yeah <https://bugzilla.redhat.com/show_bug.cgi?id=172350> suggests that
ENODEV is due to the lack of a default route.
Indeed, running that fails:
--8<---------------cut here---------------start------------->8---
(use-modules (guix))
(define build
#~(begin
(define %upnp-ipv4-multicast-address
(inet-pton AF_INET "239.255.255.250"))
(define %upnp-multicast-port 1900)
(define %upnp-ipv4-multicast-socket-address
(make-socket-address AF_INET
%upnp-ipv4-multicast-address
%upnp-multicast-port))
(define (open-upnp-socket)
(let ((s (socket PF_INET SOCK_DGRAM 0)))
(setsockopt s IPPROTO_IP IP_ADD_MEMBERSHIP
(cons %upnp-ipv4-multicast-address INADDR_ANY))
s))
(pk (open-upnp-socket))
(flush-all-ports)
(mkdir #$output)))
(with-store store
(run-with-store store
(mlet %store-monad ((drv (gexp->derivation "test" build)))
(built-derivations (list drv)))))
--8<---------------cut here---------------end--------------->8---
If we add, before the ‘open-upnp-socket’ call, this line:
--8<---------------cut here---------------start------------->8---
(system* (string-append #$net-tools "/sbin/route")
"add" "-net" "default")
--8<---------------cut here---------------end--------------->8---
‘route’ simply fails with:
SIOCADDRT: Operation not permitted
I don’t know how to work around it. You may need to disable the tests.
Thanks,
Ludo’.