Hello,

I've been working on using std.socket to do multicast programming with d. So far I have converted c code into d code to obtain the following, but I am still getting errors.

The code is as follows (windows only):

  InternetAddress localAddress = new InternetAddress(port);
InternetAddress multicastGroupAddr = new InternetAddress(multicastGroupIP, port);
  ip_mreq addRequest;

sockaddr_in local_sockaddr_in = cast(sockaddr_in)(*localAddress.name); sockaddr_in multi_sockaddr_in = cast(sockaddr_in)(*multicastGroupAddr.name);

  addRequest.imr_multiaddr = multi_sockaddr_in.sin_addr;
  addRequest.imr_interface = local_sockaddr_in.sin_addr;

  auto optionValue = (cast(char*)&addRequest)[0.. ip_mreq.sizeof];
socket.setOption(SocketOptionLevel.IP, cast(SocketOption)IP_ADD_MEMBERSHIP, optionValue);

Note that I had to import IP_ADD_MEMBERSHIP, and import sockaddr_in. This code gives me the error "Unable to set socket option: An unknown, invalid, or unsupported option or level was specified in a getsockopt or setsockopt call."

If I first bind the UdpSocket that is passed in, I instead get the error "Unable to bind socket: The requested address is not valid in its context."

I see suggestions to link to wsock32.lib in c++ forums rather than ws2_32.lib, but socket.d seems to link both? Any help diagnosing is appreciated.

-Evan Davis

Reply via email to