Commit 36b1a860 authored by Max Kellermann's avatar Max Kellermann

listen: moved code to listen_add_port()

Split code from the rather large function listen_add_config_param().
parent dbb067c0
...@@ -148,15 +148,20 @@ is_ipv6_enabled(void) ...@@ -148,15 +148,20 @@ is_ipv6_enabled(void)
} }
#endif #endif
/**
* Add a listener on a port on all interfaces.
*
* @param port the TCP port
* @param error location to store the error occuring, or NULL to ignore errors
* @return true on success
*/
static bool static bool
listen_add_config_param(G_GNUC_UNUSED unsigned int port, listen_add_port(unsigned int port, GError **error)
const struct config_param *param,
GError **error)
{ {
#ifdef HAVE_TCP
bool success; bool success;
const struct sockaddr *addrp; const struct sockaddr *addrp;
socklen_t addrlen; socklen_t addrlen;
#ifdef HAVE_TCP
struct sockaddr_in sin4; struct sockaddr_in sin4;
#ifdef HAVE_IPV6 #ifdef HAVE_IPV6
struct sockaddr_in6 sin6; struct sockaddr_in6 sin6;
...@@ -169,45 +174,57 @@ listen_add_config_param(G_GNUC_UNUSED unsigned int port, ...@@ -169,45 +174,57 @@ listen_add_config_param(G_GNUC_UNUSED unsigned int port,
memset(&sin4, 0, sizeof(struct sockaddr_in)); memset(&sin4, 0, sizeof(struct sockaddr_in));
sin4.sin_port = htons(port); sin4.sin_port = htons(port);
sin4.sin_family = AF_INET; sin4.sin_family = AF_INET;
#endif /* HAVE_TCP */
if (!param || 0 == strcmp(param->value, "any")) { g_debug("binding to any address");
#ifdef HAVE_TCP
g_debug("binding to any address");
#ifdef HAVE_IPV6 #ifdef HAVE_IPV6
if (ipv6_enabled) { if (ipv6_enabled) {
sin6.sin6_addr = in6addr_any; sin6.sin6_addr = in6addr_any;
addrp = (const struct sockaddr *)&sin6; addrp = (const struct sockaddr *)&sin6;
addrlen = sizeof(struct sockaddr_in6); addrlen = sizeof(struct sockaddr_in6);
success = listen_add_address(PF_INET6, addrp, addrlen, success = listen_add_address(PF_INET6, addrp, addrlen,
error); error);
if (!success) if (!success)
return false; return false;
} }
#endif #endif
sin4.sin_addr.s_addr = INADDR_ANY; sin4.sin_addr.s_addr = INADDR_ANY;
addrp = (const struct sockaddr *)&sin4; addrp = (const struct sockaddr *)&sin4;
addrlen = sizeof(struct sockaddr_in); addrlen = sizeof(struct sockaddr_in);
success = listen_add_address(PF_INET, addrp, addrlen, error); success = listen_add_address(PF_INET, addrp, addrlen, error);
if (!success) { if (!success) {
#ifdef HAVE_IPV6 #ifdef HAVE_IPV6
if (ipv6_enabled) if (ipv6_enabled)
/* non-critical: IPv6 listener is /* non-critical: IPv6 listener is
already set up */ already set up */
g_clear_error(error); g_clear_error(error);
else else
#endif #endif
return false; return false;
} }
return true; return true;
#else /* HAVE_TCP */ #else /* HAVE_TCP */
g_set_error(error, listen_quark(), 0, (void)port;
"TCP support is disabled");
return false; g_set_error(error, listen_quark(), 0,
"TCP support is disabled");
return false;
#endif /* HAVE_TCP */ #endif /* HAVE_TCP */
}
static bool
listen_add_config_param(unsigned int port,
const struct config_param *param,
GError **error)
{
bool success;
const struct sockaddr *addrp;
socklen_t addrlen;
if (!param || 0 == strcmp(param->value, "any")) {
return listen_add_port(port, error);
#ifdef HAVE_UN #ifdef HAVE_UN
} else if (param->value[0] == '/') { } else if (param->value[0] == '/') {
size_t path_length; size_t path_length;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment