chiark / gitweb /
rtnl: fix sockaddr confusion
[elogind.git] / src / libsystemd-rtnl / sd-rtnl.c
index 9c1f40e48a7b9be95846eec78062a3e486ebfd88..ed145b9ab313230a27c4e2a3f83aaa548a7983f3 100644 (file)
@@ -60,6 +60,7 @@ static bool rtnl_pid_changed(sd_rtnl *rtnl) {
 
 int sd_rtnl_open(uint32_t groups, sd_rtnl **ret) {
         _cleanup_sd_rtnl_unref_ sd_rtnl *rtnl = NULL;
+        socklen_t addrlen;
         int r;
 
         r = sd_rtnl_new(&rtnl);
@@ -72,10 +73,16 @@ int sd_rtnl_open(uint32_t groups, sd_rtnl **ret) {
 
         rtnl->sockaddr.nl.nl_groups = groups;
 
-        r = bind(rtnl->fd, &rtnl->sockaddr.sa, sizeof(rtnl->sockaddr));
+        addrlen = sizeof(rtnl->sockaddr);
+
+        r = bind(rtnl->fd, &rtnl->sockaddr.sa, addrlen);
         if (r < 0)
                 return -errno;
 
+        r = getsockname(rtnl->fd, &rtnl->sockaddr.sa, &addrlen);
+        if (r < 0)
+                return r;
+
         *ret = rtnl;
         rtnl = NULL;