Transmitting and Receiving to and from a Multicast IP Group
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,