X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsocket-proxy%2Fsocket-proxyd.c;h=a449b0eec42ba9d28af64c85b4f7642d4f264f5b;hb=5f7e83e8ad6f83095569c452bff2d0702ac02987;hp=4eec79ecb53cbb5ac614b300c2a04fe19aad70ec;hpb=40976028c6f24b9934e6c797ef6f5e123ac520d5;p=elogind.git diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c index 4eec79ecb..a449b0eec 100644 --- a/src/socket-proxy/socket-proxyd.c +++ b/src/socket-proxy/socket-proxyd.c @@ -37,6 +37,7 @@ #include "socket-util.h" #include "util.h" #include "event-util.h" +#include "build.h" #define BUFFER_SIZE 16384 #define _cleanup_freeaddrinfo_ _cleanup_(freeaddrinfop) @@ -109,11 +110,11 @@ static int remove_event_from_connection(struct connection *c, uint32_t events) { } if (c->events == 0) { - r = sd_event_source_set_enabled(c->w, SD_EVENT_OFF); - if (r < 0) { - log_error("Error %d disabling source: %s", r, strerror(-r)); - return r; - } + r = sd_event_source_set_enabled(c->w, SD_EVENT_OFF); + if (r < 0) { + log_error("Error %d disabling source: %s", r, strerror(-r)); + return r; + } } return 0; @@ -129,7 +130,7 @@ static int send_buffer(struct connection *sender) { * it does. */ while (sender->buffer_filled_len > sender->buffer_sent_len) { len = send(receiver->fd, sender->buffer + sender->buffer_sent_len, sender->buffer_filled_len - sender->buffer_sent_len, 0); - log_debug("send(%d, ...)=%ld", receiver->fd, len); + log_debug("send(%d, ...)=%zd", receiver->fd, len); if (len < 0) { if (errno != EWOULDBLOCK && errno != EAGAIN) { log_error("Error %d in send to fd=%d: %m", errno, receiver->fd); @@ -147,18 +148,18 @@ static int send_buffer(struct connection *sender) { sender->buffer_sent_len += len; } - log_debug("send(%d, ...) completed with %lu bytes still buffered.", receiver->fd, sender->buffer_filled_len - sender->buffer_sent_len); + log_debug("send(%d, ...) completed with %zu bytes still buffered.", receiver->fd, sender->buffer_filled_len - sender->buffer_sent_len); /* Detect a would-block state or partial send. */ if (sender->buffer_filled_len > sender->buffer_sent_len) { /* If the buffer is full, disable events coming for recv. */ if (sender->buffer_filled_len == BUFFER_SIZE) { - r = remove_event_from_connection(sender, EPOLLIN); - if (r < 0) { - log_error("Error %d disabling EPOLLIN for fd=%d: %s", r, sender->fd, strerror(-r)); - return r; - } + r = remove_event_from_connection(sender, EPOLLIN); + if (r < 0) { + log_error("Error %d disabling EPOLLIN for fd=%d: %s", r, sender->fd, strerror(-r)); + return r; + } } /* Watch for when the recipient can be sent data again. */ @@ -206,19 +207,18 @@ static int transfer_data_cb(sd_event_source *s, int fd, uint32_t revents, void * log_debug("Got event revents=%d from fd=%d (conn %p).", revents, fd, c); if (revents & EPOLLIN) { - log_debug("About to recv up to %lu bytes from fd=%d (%lu/BUFFER_SIZE).", BUFFER_SIZE - c->buffer_filled_len, fd, c->buffer_filled_len); + log_debug("About to recv up to %zu bytes from fd=%d (%zu/BUFFER_SIZE).", BUFFER_SIZE - c->buffer_filled_len, fd, c->buffer_filled_len); /* Receive until the buffer's full, there's no more data, * or the client/server disconnects. */ while (c->buffer_filled_len < BUFFER_SIZE) { len = recv(fd, c->buffer + c->buffer_filled_len, BUFFER_SIZE - c->buffer_filled_len, 0); - log_debug("recv(%d, ...)=%ld", fd, len); + log_debug("recv(%d, ...)=%zd", fd, len); if (len < 0) { if (errno != EWOULDBLOCK && errno != EAGAIN) { log_error("Error %d in recv from fd=%d: %m", errno, fd); return -errno; - } - else { + } else { /* recv() is in a blocking state. */ break; } @@ -232,9 +232,9 @@ static int transfer_data_cb(sd_event_source *s, int fd, uint32_t revents, void * } assert(len > 0); - log_debug("Recording that the buffer got %ld more bytes full.", len); + log_debug("Recording that the buffer got %zd more bytes full.", len); c->buffer_filled_len += len; - log_debug("Buffer now has %ld bytes full.", c->buffer_filled_len); + log_debug("Buffer now has %zu bytes full.", c->buffer_filled_len); } /* Try sending the data immediately. */ @@ -279,7 +279,7 @@ static int connected_to_server_cb(sd_event_source *s, int fd, uint32_t revents, } c_client_to_server->events = EPOLLIN; -goto finish; + goto finish; fail: free_connection(c_client_to_server); @@ -442,8 +442,10 @@ static int accept_cb(sd_event_source *s, int fd, uint32_t revents, void *userdat r = do_accept(e, p, fd); if (r == -EAGAIN || r == -EWOULDBLOCK) break; - if (r < 0) + if (r < 0) { log_error("Error %d while trying to accept: %s", r, strerror(-r)); + break; + } } /* Re-enable the watcher. */ @@ -509,10 +511,6 @@ static int help(void) { return 0; } -static void version(void) { - puts(PACKAGE_STRING " socket-proxyd"); -} - static int parse_argv(int argc, char *argv[], struct proxy *p) { enum { @@ -524,7 +522,7 @@ static int parse_argv(int argc, char *argv[], struct proxy *p) { { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, ARG_VERSION }, { "ignore-env", no_argument, NULL, ARG_IGNORE_ENV}, - { NULL, 0, NULL, 0 } + {} }; int c; @@ -537,23 +535,22 @@ static int parse_argv(int argc, char *argv[], struct proxy *p) { switch (c) { case 'h': - help(); - return 0; - - case '?': - return -EINVAL; + return help(); case ARG_VERSION: - version(); + puts(PACKAGE_STRING); + puts(SYSTEMD_FEATURES); return 0; case ARG_IGNORE_ENV: p->ignore_env = true; continue; - default: - log_error("Unknown option code %c", c); + case '?': return -EINVAL; + + default: + assert_not_reached("Unhandled option"); } }