X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsocket-proxy%2Fsocket-proxyd.c;h=a42e5ae27994d6c835a25792bfc45af089016d68;hb=d9d93745cd2efcdfca8f82d798e61e0ee70cef5c;hp=56e660de57cb6b50cddd7b2d4c4a64ce22309c55;hpb=e633ea1c9c5249ed5bf708a2ed6385c4823d4706;p=elogind.git diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c index 56e660de5..a42e5ae27 100644 --- a/src/socket-proxy/socket-proxyd.c +++ b/src/socket-proxy/socket-proxyd.c @@ -287,7 +287,7 @@ static int traffic_cb(sd_event_source *s, int fd, uint32_t revents, void *userda if (c->client_fd == -1 && c->client_to_server_buffer_full <= 0) goto quit; - r = connection_enable_event_sources(c, sd_event_get(s)); + r = connection_enable_event_sources(c, sd_event_source_get_event(s)); if (r < 0) goto quit; @@ -318,7 +318,7 @@ static int connection_enable_event_sources(Connection *c, sd_event *event) { if (c->server_event_source) r = sd_event_source_set_io_events(c->server_event_source, a); else if (c->server_fd >= 0) - r = sd_event_add_io(event, c->server_fd, a, traffic_cb, c, &c->server_event_source); + r = sd_event_add_io(event, &c->server_event_source, c->server_fd, a, traffic_cb, c); else r = 0; @@ -330,7 +330,7 @@ static int connection_enable_event_sources(Connection *c, sd_event *event) { if (c->client_event_source) r = sd_event_source_set_io_events(c->client_event_source, b); else if (c->client_fd >= 0) - r = sd_event_add_io(event, c->client_fd, b, traffic_cb, c, &c->client_event_source); + r = sd_event_add_io(event, &c->client_event_source, c->client_fd, b, traffic_cb, c); else r = 0; @@ -373,7 +373,7 @@ static int connect_cb(sd_event_source *s, int fd, uint32_t revents, void *userda if (r < 0) goto fail; - r = connection_enable_event_sources(c, sd_event_get(s)); + r = connection_enable_event_sources(c, sd_event_source_get_event(s)); if (r < 0) goto fail; @@ -433,7 +433,7 @@ static int add_connection_socket(Context *context, sd_event *event, int fd) { r = connect(c->client_fd, &sa.sa, salen); if (r < 0) { if (errno == EINPROGRESS) { - r = sd_event_add_io(event, c->client_fd, EPOLLOUT, connect_cb, c, &c->client_event_source); + r = sd_event_add_io(event, &c->client_event_source, c->client_fd, EPOLLOUT, connect_cb, c); if (r < 0) { log_error("Failed to add connection socket: %s", strerror(-r)); goto fail; @@ -462,6 +462,7 @@ fail: } static int accept_cb(sd_event_source *s, int fd, uint32_t revents, void *userdata) { + _cleanup_free_ char *peer = NULL; Context *context = userdata; int nfd = -1, r; @@ -471,24 +472,24 @@ static int accept_cb(sd_event_source *s, int fd, uint32_t revents, void *userdat assert(context); nfd = accept4(fd, NULL, NULL, SOCK_NONBLOCK|SOCK_CLOEXEC); - if (nfd >= 0) { - _cleanup_free_ char *peer = NULL; - + if (nfd < 0) { + if (errno != -EAGAIN) + log_warning("Failed to accept() socket: %m"); + } else { getpeername_pretty(nfd, &peer); log_debug("New connection from %s", strna(peer)); - r = add_connection_socket(context, sd_event_get(s), nfd); + r = add_connection_socket(context, sd_event_source_get_event(s), nfd); if (r < 0) { + log_error("Failed to accept connection, ignoring: %s", strerror(-r)); close_nointr_nofail(fd); - return r; } - - } else if (errno != -EAGAIN) - log_warning("Failed to accept() socket: %m"); + } r = sd_event_source_set_enabled(s, SD_EVENT_ONESHOT); if (r < 0) { - log_error("Error %d while re-enabling listener with ONESHOT: %s", r, strerror(-r)); + log_error("Error while re-enabling listener with ONESHOT: %s", strerror(-r)); + sd_event_exit(sd_event_source_get_event(s), r); return r; } @@ -525,7 +526,7 @@ static int add_listen_socket(Context *context, sd_event *event, int fd) { return r; } - r = sd_event_add_io(event, fd, EPOLLIN, accept_cb, context, &source); + r = sd_event_add_io(event, &source, fd, EPOLLIN, accept_cb, context); if (r < 0) { log_error("Failed to add event source: %s", strerror(-r)); return r; @@ -626,12 +627,14 @@ int main(int argc, char *argv[]) { if (r <= 0) goto finish; - r = sd_event_new(&event); + r = sd_event_default(&event); if (r < 0) { log_error("Failed to allocate event loop: %s", strerror(-r)); goto finish; } + sd_event_set_watchdog(event, true); + n = sd_listen_fds(1); if (n < 0) { log_error("Failed to receive sockets from parent.");