activate: export make_socket_fd

Also improve logging to print out the parsed address on error.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2014-03-09 21:33:04 -04:00
parent 6cf487afad
commit e0aa372610
3 changed files with 32 additions and 20 deletions

View File

@ -59,25 +59,6 @@ static int add_epoll(int epoll_fd, int fd) {
return 0;
}
static int make_socket_fd(const char* address, int flags) {
SocketAddress a;
int fd, r;
r = socket_address_parse(&a, address);
if (r < 0) {
log_error("Failed to parse socket: %s", strerror(-r));
return r;
}
fd = socket_address_listen(&a, flags, SOMAXCONN, SOCKET_ADDRESS_DEFAULT, NULL, false, false, 0755, 0644, NULL);
if (fd < 0) {
log_error("Failed to listen: %s", strerror(-r));
return fd;
}
return fd;
}
static int open_sockets(int *epoll_fd, bool accept) {
char **address;
int n, fd, r;
@ -119,7 +100,7 @@ static int open_sockets(int *epoll_fd, bool accept) {
STRV_FOREACH(address, arg_listen) {
fd = make_socket_fd(*address, SOCK_STREAM | (arg_accept*SOCK_CLOEXEC));
fd = make_socket_fd(LOG_DEBUG, *address, SOCK_STREAM | (arg_accept*SOCK_CLOEXEC));
if (fd < 0) {
log_open();
log_error("Failed to open '%s': %s", *address, strerror(-fd));

View File

@ -143,3 +143,33 @@ int socket_address_listen(
return r;
}
int make_socket_fd(int log_level, const char* address, int flags) {
SocketAddress a;
int fd, r;
r = socket_address_parse(&a, address);
if (r < 0) {
log_error("Failed to parse socket: %s", strerror(-r));
return r;
}
fd = socket_address_listen(&a, flags, SOMAXCONN, SOCKET_ADDRESS_DEFAULT,
NULL, false, false, 0755, 0644, NULL);
if (fd < 0 || log_get_max_level() >= log_level) {
char _cleanup_free_ *p = NULL;
r = socket_address_print(&a, &p);
if (r < 0) {
log_error("socket_address_print(): %s", strerror(-r));
return r;
}
if (fd < 0)
log_error("Failed to listen on %s: %s", p, strerror(-r));
else
log_full(log_level, "Listening on %s", p);
}
return fd;
}

View File

@ -84,6 +84,7 @@ int socket_address_listen(
mode_t directory_mode,
mode_t socket_mode,
const char *label);
int make_socket_fd(int log_level, const char* address, int flags);
bool socket_address_is(const SocketAddress *a, const char *s, int type);
bool socket_address_is_netlink(const SocketAddress *a, const char *s);