diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-01-24 15:09:40 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-02-20 06:17:42 +0900 |
commit | 53bba2fb1da3ca26b1cf96c461598d53df2040cc (patch) | |
tree | 538a8753e70edaf07954cfd0651ae16b831fe6ea /src/udev/udev-ctrl.c | |
parent | 100bc5bf98ed051e94667c9581f7098856527ee9 (diff) | |
download | systemd-53bba2fb1da3ca26b1cf96c461598d53df2040cc.tar.gz |
udev-ctrl: refactor udev_ctrl_enable_receiving()
Diffstat (limited to 'src/udev/udev-ctrl.c')
-rw-r--r-- | src/udev/udev-ctrl.c | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c index 0ed59c0c70..7d8ff6d1ce 100644 --- a/src/udev/udev-ctrl.c +++ b/src/udev/udev-ctrl.c @@ -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; - - 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); - } + int r; - if (err < 0) - return log_error_errno(errno, "Failed to bind socket: %m"); + assert(uctrl); - err = listen(uctrl->sock, 0); - if (err < 0) - return log_error_errno(errno, "Failed to listen: %m"); + if (uctrl->bound) + return 0; - 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; } |