assert_return(ret, -EINVAL);
- r = sd_rtnl_new(ret);
+ r = sd_rtnl_new(&rtnl);
if (r < 0)
return r;
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);