udev-ctrl: refactor udev_ctrl_enable_receiving()

This commit is contained in:
Yu Watanabe 2019-01-24 15:09:40 +09:00
parent 100bc5bf98
commit 53bba2fb1d
1 changed files with 18 additions and 15 deletions

View File

@ -116,25 +116,28 @@ int udev_ctrl_new_from_fd(struct udev_ctrl **ret, int fd) {
}
int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl) {
int err;
int r;
if (!uctrl->bound) {
err = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
if (err < 0 && errno == EADDRINUSE) {
(void) sockaddr_un_unlink(&uctrl->saddr.un);
err = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
}
assert(uctrl);
if (err < 0)
return log_error_errno(errno, "Failed to bind socket: %m");
if (uctrl->bound)
return 0;
err = listen(uctrl->sock, 0);
if (err < 0)
return log_error_errno(errno, "Failed to listen: %m");
uctrl->bound = true;
uctrl->cleanup_socket = true;
r = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
if (r < 0 && errno == EADDRINUSE) {
(void) sockaddr_un_unlink(&uctrl->saddr.un);
r = bind(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen);
}
if (r < 0)
return log_error_errno(errno, "Failed to bind udev control socket: %m");
if (listen(uctrl->sock, 0) < 0)
return log_error_errno(errno, "Failed to listen udev control socket: %m");
uctrl->bound = true;
uctrl->cleanup_socket = true;
return 0;
}