aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2011-09-20 20:52:49 +0200
committerMax Kellermann <max@duempel.org>2011-09-20 21:15:22 +0200
commita3f7947ad2e987aaa06a81fe564871448aeb12d2 (patch)
treefc7b5b33a2e9fee14e79ed67ef28947ecd423fc2
parent7d9d459ac2c71e0b3598ed0f606cd2d550853838 (diff)
downloadmpd-a3f7947ad2e987aaa06a81fe564871448aeb12d2.tar.gz
mpd-a3f7947ad2e987aaa06a81fe564871448aeb12d2.tar.xz
mpd-a3f7947ad2e987aaa06a81fe564871448aeb12d2.zip
server_socket: use resolve_host_port() instead of getaddrinfo()
Allow port specification in "bind_to_address" settings.
-rw-r--r--NEWS1
-rw-r--r--doc/mpd.conf.54
-rw-r--r--src/server_socket.c21
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);