summarylogtreecommitdiffstats
path: root/minidlna_listen_interface.patch
blob: b8620dcc80b2ec9bb567f58f2cf3c2e6d7bd4ed8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
diff --git a/minidlna.c b/minidlna.c
index 10b4806..2a274c7 100644
--- a/minidlna.c
+++ b/minidlna.c
@@ -126,7 +126,21 @@ OpenAndConfHTTPSocket(unsigned short port)
 	memset(&listenname, 0, sizeof(struct sockaddr_in));
 	listenname.sin_family = AF_INET;
 	listenname.sin_port = htons(port);
-	listenname.sin_addr.s_addr = htonl(INADDR_ANY);
+
+	/* TODO: network_interfaces supports 8 interfaces. */
+
+	/* bind to one network_interface, otherwise fallback to INADDR_ANY */
+	if (runtime_vars.ifaces[0] && !runtime_vars.ifaces[1]) {
+		reload_ifaces(0);
+		DPRINTF(E_INFO, L_GENERAL, "Using interface %s and address %s\n", runtime_vars.ifaces[0], lan_addr[0].str);
+		if (!lan_addr[0].str[0])
+			return -1;
+		listenname.sin_addr = lan_addr[0].addr;
+	}
+	else {
+		DPRINTF(E_WARN, L_GENERAL, "Using INADDR_ANY\n");
+		listenname.sin_addr.s_addr = htonl(INADDR_ANY);
+	}
 
 	if (bind(s, (struct sockaddr *)&listenname, sizeof(struct sockaddr_in)) < 0)
 	{