X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=socket.c;h=755bc598da7e035b3a278525b543e717ff4caec4;hp=827d7b5e97600f5771a5b7d828782e8da650702d;hb=b29a8e58fa7c30dfcc4e4b1ccf9f409dc2935f8a;hpb=40d50879d9339e539a30e5d32234baffb732f0f9 diff --git a/socket.c b/socket.c index 827d7b5e9..755bc598d 100644 --- a/socket.c +++ b/socket.c @@ -119,9 +119,14 @@ static bool have_non_accept_socket(Socket *s) { if (!s->accept) return true; - LIST_FOREACH(port, p, s->ports) + LIST_FOREACH(port, p, s->ports) { + + if (p->type != SOCKET_SOCKET) + return true; + if (!socket_address_can_accept(&p->address)) return true; + } return false; } @@ -448,8 +453,9 @@ static int socket_watch_fds(Socket *s) { if (p->fd < 0) continue; - p->fd_watch.data.socket_accept = + p->fd_watch.socket_accept = s->accept && + p->type == SOCKET_SOCKET && socket_address_can_accept(&p->address); if ((r = unit_watch_fd(UNIT(s), p->fd, EPOLLIN, &p->fd_watch)) < 0) @@ -661,7 +667,7 @@ static void socket_enter_signal(Socket *s, SocketState state, bool success) { } } - if (sent) { + if (sent && s->control_pid > 0) { if ((r = unit_watch_timer(UNIT(s), s->timeout_usec, &s->timer_watch)) < 0) goto fail; @@ -1088,7 +1094,7 @@ static void socket_fd_event(Unit *u, int fd, uint32_t events, Watch *w) { goto fail; } - if (w->data.socket_accept) { + if (w->socket_accept) { for (;;) { if ((cfd = accept4(fd, NULL, NULL, SOCK_NONBLOCK)) < 0) { @@ -1104,7 +1110,6 @@ static void socket_fd_event(Unit *u, int fd, uint32_t events, Watch *w) { } } - log_debug("cfd=%i", cfd); socket_enter_running(s, cfd); return;