Transmitting and Receiving to and from a Multicast IP Group
Transmitting to a Multicast IP Group Address
Transmitting to an IP multicast group is identical to transmitting to a unicast or broadcast address. However, when using only IPv4, the stack must be configured to enable multicast transmit, see Multicast Configuration.
Receiving from a Multicast IP Group
An IP multicast group must be joined before packets can be received from it from it (see Joining and Leaving a Multicast Group for more information). Once this is done, receiving from a multicast group only requires a socket bound to the NET_SOCK_ADDR_IP_WILDCARD address, as shown in the following example:
NET_SOCK_ID sock;
NET_SOCK_ADDR_IP sock_addr_ip;
NET_SOCK_ADDR addr_remote;
NET_SOCK_ADDR_LEN addr_remote_len;
CPU_CHAR rx_buf[100];
CPU_INT16U rx_len;
NET_ERR err;
sock = NetSock_Open((NET_SOCK_PROTOCOL_FAMILY) NET_SOCK_ADDR_FAMILY_IP_V4,
(NET_SOCK_TYPE ) NET_SOCK_TYPE_DATAGRAM,
(NET_SOCK_PROTOCOL ) NET_SOCK_PROTOCOL_UDP,
(NET_ERR *)&err);
if (err != NET_SOCK_ERR_NONE) {
/* Handle error. */
}
Mem_Set(&sock_addr_ip, (CPU_CHAR)0, sizeof(sock_addr_ip));
sock_addr_ip.AddrFamily = NET_SOCK_ADDR_FAMILY_IP_V4;
sock_addr_ip.Addr = NET_UTIL_HOST_TO_NET_32(NET_SOCK_ADDR_IP_WILDCARD);
sock_addr_ip.Port = NET_UTIL_HOST_TO_NET_16(10000);
NetSock_Bind((NET_SOCK_ID ) sock,
(NET_SOCK_ADDR *)&sock_addr_ip,
(NET_SOCK_ADDR_LEN) NET_SOCK_ADDR_SIZE,
(NET_ERR *)&err);
if (err != NET_SOCK_ERR_NONE) {
/* Handle error. */
}
rx_len = NetSock_RxDataFrom((NET_SOCK_ID ) sock,
(void *)&rx_buf [0],
(CPU_INT16U ) BUF_SIZE,
(CPU_INT16S ) NET_SOCK_FLAG_NONE,
(NET_SOCK_ADDR *)&addr_remote,
(NET_SOCK_ADDR_LEN *)&addr_remote_len,
(void *) 0,
(CPU_INT08U ) 0,
(CPU_INT08U *) 0,
(NET_ERR *)&err);
, multiple selections available,