Re: Problem receiving Multicast traffic transmitted on receiving inter



No, I think that the docs are wrong. I've always 'heard' my own packets,
when using a separate receiver socket, at least. You might check to see if
you're hearing them on the sender socket, too. Maybe that's what they were
trying to say...

Paul T.

"RKRobinson" <RKRobinson@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:C5EEAA36-68D5-4132-B78F-6FD7099487AC@xxxxxxxxxxxxxxxx
Hi,
I have a service that both sends and receives multicast frames. From
reading
the release notes for CE 6 it indicates that IP_MULTICAST_LOOP is not
supported, however it also states "that Any sockets that are listening
for
multicast traffic on an interface will not receive multicast traffic sent
from that interface". This does not seem to be the case as my listener
receives all multicast frames transmited by my sender socket have I missed
something? I have attached init code below any coments would be welcome.
TIA Richard.

BOOL RMTPInitMulticast (void)
{
BOOL fFlag;
// Initialize Winsock.
if (WSAStartup (MAKEWORD(1,1), &WSAData) != 0)
{
DEBUGMSG(ZONE_NET,(L"WSAStartup failed! Error: %d"
,WSAGetLastError()));
return FALSE;
}

// Create receiving datagram socket, Sock.
if ((socGroupListener = socket (AF_INET, SOCK_DGRAM, 0)) ==
INVALID_SOCKET)
{
DEBUGMSG(ZONE_NET,(L"Allocating Rx socket failed! Error: %d"
,WSAGetLastError()));
return FALSE;
}
// Create Transmitting datagram socket, Sock.
if ((socGroupSender = socket (AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET)
{
DEBUGMSG(ZONE_NET,(L"Allocating Tx socket failed! Error: %d"
,WSAGetLastError()));
closesocket (socGroupListener);
closesocket (socGroupSender);
return FALSE;
}

// set up Listener address for multicast
sinListener.sin_family=AF_INET;
sinListener.sin_port=htons(MULTICAST_PORT);
sinListener.sin_addr.s_addr=htonl(INADDR_ANY);

// Associate the listener address with Sock.
if (bind (socGroupListener,
(struct sockaddr FAR *) &sinListener,
sizeof (sinListener)) == SOCKET_ERROR)
{
DEBUGMSG(ZONE_NET,(L"Binding Rx socket failed! Error: %d",
WSAGetLastError ()));
closesocket (socGroupListener);
closesocket (socGroupSender);
return FALSE;
}

// Join the multicast group from which to receive datagrams.
mreq.imr_multiaddr.s_addr = inet_addr (MULTICAST_GROUP);
mreq.imr_interface.s_addr = INADDR_ANY;

if (setsockopt (socGroupListener,
IPPROTO_IP,
IP_ADD_MEMBERSHIP,
(char FAR *)&mreq,
sizeof (mreq)) == SOCKET_ERROR)
{
DEBUGMSG(ZONE_NET,(L"setsockopt failed! Error: %d",
WSAGetLastError ()));
closesocket (socGroupListener);
closesocket (socGroupSender);
return FALSE;
}

//set up sender address for information
sinSender.sin_family=AF_INET;
sinSender.sin_port=htons(SOURCE_PORT);
sinSender.sin_addr.s_addr=htonl(INADDR_ANY);

// Associate the Sender address with Sock.
if (bind (socGroupSender,
(struct sockaddr FAR *) &sinSender,
sizeof (sinSender)) == SOCKET_ERROR)
{
DEBUGMSG(ZONE_NET,(L"Binding Tx socket failed! Error: %d",
WSAGetLastError ()));
closesocket (socGroupListener);
closesocket (socGroupSender);
return FALSE;
}

// Join the multicast group to which we Transmit datagrams.
mreq.imr_multiaddr.s_addr = inet_addr (MULTICAST_GROUP);
mreq.imr_interface.s_addr = INADDR_ANY;

if (setsockopt (socGroupSender,
IPPROTO_IP,
IP_ADD_MEMBERSHIP,
(char FAR *)&mreq,
sizeof (mreq)) == SOCKET_ERROR)
{
DEBUGMSG(ZONE_NET,(L"setsockopt failed! Error: %d",
WSAGetLastError ()));
closesocket (socGroupListener);
closesocket (socGroupSender);
return FALSE;
}

return TRUE;
}


.



Relevant Pages