minissdpd/openssdpsocket.c: listen on only 1 IPv4 if only 1 interface is specified also when ENABLE_IPV6 is not defined

This commit is contained in:
Thomas Bernard 2014-11-06 11:15:43 +01:00
parent edfd211276
commit 7ec7cec59e
2 changed files with 22 additions and 7 deletions

View File

@ -1,4 +1,8 @@
$Id: Changelog.txt,v 1.35 2014/09/06 08:32:58 nanard Exp $ $Id: Changelog.txt,v 1.36 2014/11/06 10:13:36 nanard Exp $
2014/11/06:
listen on only 1 IPv4 if only 1 interface is specified
also when ENABLE_IPV6 is not defined
2014/09/06: 2014/09/06:
freebsd-glue for Debian/kFreeBSD freebsd-glue for Debian/kFreeBSD

View File

@ -1,4 +1,4 @@
/* $Id: openssdpsocket.c,v 1.13 2014/05/01 21:05:14 nanard Exp $ */ /* $Id: openssdpsocket.c,v 1.14 2014/11/06 10:13:36 nanard Exp $ */
/* MiniUPnP project /* MiniUPnP project
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
* (c) 2006-2014 Thomas Bernard * (c) 2006-2014 Thomas Bernard
@ -81,7 +81,9 @@ AddDropMulticastMembership(int s, const char * ifaddr, int ipv6, int drop)
#ifdef ENABLE_IPV6 #ifdef ENABLE_IPV6
struct ipv6_mreq mr; struct ipv6_mreq mr;
unsigned int ifindex; unsigned int ifindex;
#endif #else /* ENABLE_IPV6 */
(void)ipv6;
#endif /* ENABLE_IPV6 */
if(s <= 0) if(s <= 0)
return -1; /* nothing to do */ return -1; /* nothing to do */
@ -211,10 +213,19 @@ OpenAndConfSSDPReceiveSocket(int n_listen_addr,
memset(&sockname, 0, sizeof(struct sockaddr_in)); memset(&sockname, 0, sizeof(struct sockaddr_in));
sockname.sin_family = AF_INET; sockname.sin_family = AF_INET;
sockname.sin_port = htons(SSDP_PORT); sockname.sin_port = htons(SSDP_PORT);
/* NOTE : it seems it doesnt work when binding on the specific address */ if(n_listen_addr == 1)
/*sockname.sin_addr.s_addr = inet_addr(UPNP_MCAST_ADDR);*/ {
sockname.sin_addr.s_addr = htonl(INADDR_ANY); sockname.sin_addr.s_addr = GetIfAddrIPv4(listen_addr[0]);
/*sockname.sin_addr.s_addr = inet_addr(ifaddr);*/ if(sockname.sin_addr.s_addr == INADDR_NONE)
{
syslog(LOG_ERR, "no IPv4 address for interface %s",
listen_addr[0]);
close(s);
return -1;
}
}
else
sockname.sin_addr.s_addr = htonl(INADDR_ANY);
sockname_len = sizeof(struct sockaddr_in); sockname_len = sizeof(struct sockaddr_in);
#endif #endif