#include "socket-util.h"
#include "util.h"
#include "event-util.h"
+#include "build.h"
#define BUFFER_SIZE 16384
#define _cleanup_freeaddrinfo_ _cleanup_(freeaddrinfop)
}
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;
* 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);
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. */
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;
}
}
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. */
}
c_client_to_server->events = EPOLLIN;
-goto finish;
+ goto finish;
fail:
free_connection(c_client_to_server);
return 0;
}
-static void version(void) {
- puts(PACKAGE_STRING " socket-proxyd");
-}
-
static int parse_argv(int argc, char *argv[], struct proxy *p) {
enum {
{ "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;
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");
}
}