From a3f7947ad2e987aaa06a81fe564871448aeb12d2 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 20 Sep 2011 20:52:49 +0200 Subject: [PATCH] server_socket: use resolve_host_port() instead of getaddrinfo() Allow port specification in "bind_to_address" settings. --- NEWS | 1 + doc/mpd.conf.5 | 4 ++++ src/server_socket.c | 21 ++++----------------- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/NEWS b/NEWS index cfa506ef0..746af72e5 100644 --- a/NEWS +++ b/NEWS @@ -20,6 +20,7 @@ ver 0.17 (2011/??/??) - roar: new output plugin for RoarAudio * state_file: add option "restore_paused" * cue: show CUE track numbers +* allow port specification in "bind_to_address" settings ver 0.16.5 (2010/??/??) diff --git a/doc/mpd.conf.5 b/doc/mpd.conf.5 index af65e1146..bd890228b 100644 --- a/doc/mpd.conf.5 +++ b/doc/mpd.conf.5 @@ -83,6 +83,10 @@ This specifies which address mpd binds to and listens on. Multiple bind_to_address parameters may be specified. The default is "any", which binds to all available addresses. +You can set a port that is different from the global port setting, +e.g. "localhost:6602". IPv6 addresses must be enclosed in square +brackets if you want to configure a port, e.g. "[::1]:6602". + To bind to a Unix domain socket, specify an absolute path. For a system-wide MPD, we suggest the path "\fB/var/run/mpd/socket\fP". .TP diff --git a/src/server_socket.c b/src/server_socket.c index dba549bfc..998786d7b 100644 --- a/src/server_socket.c +++ b/src/server_socket.c @@ -380,24 +380,11 @@ server_socket_add_host(struct server_socket *ss, const char *hostname, unsigned port, GError **error_r) { #ifdef HAVE_TCP - struct addrinfo hints; - memset(&hints, 0, sizeof(hints)); - hints.ai_flags = AI_PASSIVE; - hints.ai_family = PF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - - char service[20]; - g_snprintf(service, sizeof(service), "%u", port); - - struct addrinfo *ai; - int ret = getaddrinfo(hostname, service, &hints, &ai); - if (ret != 0) { - g_set_error(error_r, server_socket_quark(), ret, - "Failed to look up host \"%s\": %s", - hostname, gai_strerror(ret)); + struct addrinfo *ai = resolve_host_port(hostname, port, + AI_PASSIVE, SOCK_STREAM, + error_r); + if (ai == NULL) return false; - } for (const struct addrinfo *i = ai; i != NULL; i = i->ai_next) server_socket_add_address(ss, i->ai_addr, i->ai_addrlen);