SF Tracker [ 1628629 ] Multicast interface patch
Submitted By: Fredrik Svensson - svefredrik This patch fixes two problems: * Specify the IP address for the interface when we do setsockopt IP_ADD_MEMBERSHIP. This makes it possible to run when no default router has been configured. * Explicitly set the multicast interface through setsockopt IP_MULTICAST_IF. Avoids socket error -207 in some cases. git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/trunk@119 119443c7-1b9e-41f8-b6fc-b9c35fce742c
This commit is contained in:
parent
363ac6e007
commit
2331839f69
@ -922,6 +922,7 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
||||
struct ip_mreq ssdpMcastAddr;
|
||||
struct sockaddr_in ssdpAddr;
|
||||
int option = 1;
|
||||
struct in_addr addr;
|
||||
|
||||
CLIENTONLY( if( ( ssdpReqSock = socket( AF_INET, SOCK_DGRAM, 0 ) )
|
||||
== UPNP_INVALID_SOCKET ) {
|
||||
@ -997,7 +998,7 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
||||
}
|
||||
|
||||
memset( ( void * )&ssdpMcastAddr, 0, sizeof( struct ip_mreq ) );
|
||||
ssdpMcastAddr.imr_interface.s_addr = htonl( INADDR_ANY );
|
||||
ssdpMcastAddr.imr_interface.s_addr = inet_addr( LOCAL_HOST );
|
||||
ssdpMcastAddr.imr_multiaddr.s_addr = inet_addr( SSDP_IP );
|
||||
if( setsockopt( ssdpSock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
|
||||
( char * )&ssdpMcastAddr,
|
||||
@ -1012,6 +1013,17 @@ get_ssdp_sockets( MiniServerSockArray * out )
|
||||
CLIENTONLY( UpnpCloseSocket( ssdpReqSock ) );
|
||||
return UPNP_E_SOCKET_ERROR;
|
||||
}
|
||||
|
||||
/* Set multicast interface. */
|
||||
memset( ( void * )&addr, 0, sizeof( struct in_addr ));
|
||||
addr.s_addr = inet_addr(LOCAL_HOST);
|
||||
if (setsockopt(ssdpSock, IPPROTO_IP, IP_MULTICAST_IF,
|
||||
(char *)&addr, sizeof addr) != 0) {
|
||||
DBGONLY(UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||
"Couldn't set multicast interface.\n" ));
|
||||
/* This is probably not a critical error, so let's continue. */
|
||||
}
|
||||
|
||||
// result is not checked becuase it will fail in WinMe and Win9x.
|
||||
setsockopt( ssdpSock, IPPROTO_IP,
|
||||
IP_MULTICAST_TTL, &ttl, sizeof( ttl ) );
|
||||
|
Loading…
x
Reference in New Issue
Block a user