chiark / gitweb /
sd-rtnl: extend type system to allow address-family to decide the union members
[elogind.git] / src / libsystemd / sd-rtnl / sd-rtnl.c
index 767c583735211dcf35b8533348a7b504ab7b4503..ae49c77e018f4e023c11b519453e4de01c4d6b38 100644 (file)
@@ -74,7 +74,7 @@ int sd_rtnl_new_from_netlink(sd_rtnl **ret, int fd) {
 
         assert_return(ret, -EINVAL);
 
-        r = sd_rtnl_new(ret);
+        r = sd_rtnl_new(&rtnl);
         if (r < 0)
                 return r;
 
@@ -146,7 +146,8 @@ static int rtnl_open_fd_ap(sd_rtnl **ret, int fd, unsigned n_groups, va_list ap)
         addrlen = sizeof(rtnl->sockaddr);
 
         r = bind(fd, &rtnl->sockaddr.sa, addrlen);
-        if (r < 0)
+        /* ignore EINVAL to allow opening an already bound socket */
+        if (r < 0 && errno != EINVAL)
                 return -errno;
 
         r = getsockname(fd, &rtnl->sockaddr.sa, &addrlen);