digitalmars.D.learn - ?? How to subscribe to Multicast Broadcasts ??
- Joe (23/23) Aug 12 2018 Hello All!
- Steven Schveighoffer (6/35) Aug 17 2018 This needs more context. What is your platform? Have you tried doing it
- Sebastiaan Koppe (8/11) Aug 18 2018 I implemented multicast support in vibe.d, I hope looking at the
Hello All! I've been trying every possible combination and cannot get anything working. (>_<) This is I think the closest I've got, I think the problem may be with the 3 argument. I'm not sure how to join the Multicast IP membership? (this code currently does not work - throws error: 'Unable to set socket option: An invalid argument was supplied'.) Socket listen_socket = new Socket(AddressFamily.INET, SocketType.DGRAM, ProtocolType.UDP); listen_socket.setOption(SocketOptionLevel.IGMP, SocketOption.IPV6_JOIN_GROUP, 1); auto adr = getAddress("0.0.0.0", "56000"); listen_socket.bind(adr[0]); This is how the messages are sent (which works fine): Socket udp_broadcast_soc = new UdpSocket(); udp_broadcast_soc.setOption(SocketOptionLevel.SOCKET, SocketOption.BROADCAST, 1); auto adr = getAddress("239.192.0.10", 54000); udp_broadcast_soc.sendTo(<message>, adr[0]); Please Please Please Help, I am desperate! Many Thanks in Advance for your time & attention, -joe
Aug 12 2018
On 8/12/18 9:12 PM, Joe wrote:Hello All! I've been trying every possible combination and cannot get anything working. (>_<) This is I think the closest I've got, I think the problem may be with the 3 argument. I'm not sure how to join the Multicast IP membership? (this code currently does not work - throws error: 'Unable to set socket option: An invalid argument was supplied'.) Socket listen_socket = new Socket(AddressFamily.INET, SocketType.DGRAM, ProtocolType.UDP); listen_socket.setOption(SocketOptionLevel.IGMP, SocketOption.IPV6_JOIN_GROUP, 1); auto adr = getAddress("0.0.0.0", "56000"); listen_socket.bind(adr[0]); This is how the messages are sent (which works fine): Socket udp_broadcast_soc = new UdpSocket(); udp_broadcast_soc.setOption(SocketOptionLevel.SOCKET, SocketOption.BROADCAST, 1); auto adr = getAddress("239.192.0.10", 54000); udp_broadcast_soc.sendTo(<message>, adr[0]); Please Please Please Help, I am desperate!This needs more context. What is your platform? Have you tried doing it in C to see what works? One thing that stands out so far is you are using IPV4 addresses and constants everywhere, yet you are using IPV6_JOIN_GROUP socket option. -Steve
Aug 17 2018
On Monday, 13 August 2018 at 01:12:16 UTC, Joe wrote:Please Please Please Help, I am desperate! Many Thanks in Advance for your time & attention, -joeI implemented multicast support in vibe.d, I hope looking at the source can help you: https://github.com/vibe-d/vibe.d/blob/master/core/vibe/core/drivers/libevent2.d#L1129 Also, shouldn't both sending and receiving ports be the same? Where I use it I call addMembership and then canBroadcast on a vibed socket, and it has worked for me. It wouldn't be difficult to port that back to std.socket.
Aug 18 2018