int udev_ctrl_new_from_fd(UdevCtrl **ret, int fd) {
_cleanup_close_ int sock = -EBADF;
UdevCtrl *uctrl;
+ int r;
assert(ret);
return log_error_errno(errno, "Failed to create socket: %m");
}
+ /* enable receiving of the sender credentials in the messages */
+ r = setsockopt_int(fd >= 0 ? fd : sock, SOL_SOCKET, SO_PASSCRED, true);
+ if (r < 0)
+ log_warning_errno(r, "Failed to set SO_PASSCRED, ignoring: %m");
+
uctrl = new(UdevCtrl, 1);
if (!uctrl)
return -ENOMEM;
return 0;
}
- /* enable receiving of the sender credentials in the messages */
- r = setsockopt_int(sock, SOL_SOCKET, SO_PASSCRED, true);
- if (r < 0)
- log_warning_errno(r, "Failed to set SO_PASSCRED, ignoring: %m");
-
r = sd_event_add_io(uctrl->event, &uctrl->event_source_connect, sock, EPOLLIN, udev_ctrl_connection_event_handler, uctrl);
if (r < 0) {
log_error_errno(r, "Failed to create event source for udev control connection: %m");