Hi!

Jan Nieuwenhuizen <jann...@gnu.org> skribis:

> (use-modules (guix build syscalls))
>
> (define LOOPBACK? #t)
> (define IP "127.0.0.1" )
> (define INTERFACE "lo")
> (define NETMASK #f)
> (define GATEWAY #f)
>
> (format #t "ifreq-struct-size: ~a\n" (@@ (guix build syscalls) 
> ifreq-struct-size))
> (format #t "sizeof-ifconf: ~s\n" (@@ (guix build syscalls) sizeof-ifconf))
> (define (test)
>   (let* ((addr     (inet-pton AF_INET IP))
>          (sockaddr (make-socket-address AF_INET addr 0))
>          (mask     (and NETMASK
>                         (inet-pton AF_INET NETMASK)))
>          (maskaddr (and mask
>                         (make-socket-address AF_INET
>                                              mask 0)))
>          (gateway  (and GATEWAY
>                         (inet-pton AF_INET GATEWAY)))
>          (gatewayaddr (and gateway
>                            (make-socket-address AF_INET
>                                                 gateway 0))))
>     (configure-network-interface INTERFACE sockaddr
>                                  (logior IFF_UP
>                                          (if LOOPBACK?
>                                              IFF_LOOPBACK
>                                              0))
>                                  #:netmask maskaddr)
>     (when gateway
>       (let ((sock (socket AF_INET SOCK_DGRAM 0)))
>         (add-network-route/gateway sock gatewayaddr)
>         (close-port sock)))))
>
> (test)

Could you change that last line to:

  (catch 'system-error
    test
    (lambda args
      (let ((errno (system-error-errno args)))
        (pk errno (strerror errno)))))

?

The out-of-range exception presumably is an unrelated error in Guile’s
debugger and it’s shadowing the one we’re interested in.

TIA!

Ludo’.

Reply via email to