NDDSDomainProperties domainProperties; NDDSDomainDerivable *domain = NULL; unsigned int loopBackIP = NddsStringToAddress("127.0.0.1"); // set the IP you want other NDDS apps to send to unsigned int interfaceIP = NddsStringToAddress("100.50.40.1"); /*** Create domain and bind it to the "interfaceIP" NIC. ***/ // Retrieve the domain's default properties. NddsDomainPropertiesDefaultGet(&domainProperties); // Remove all NICs other than interfaceIP, but DON'T remove loopback. for (int i=0; i < domainProperties.nicIPAddressCount; i++) { if ((domainProperties.nicProperties[i].ipAddress != loopBackIP) && (domainProperties.nicProperties[i].ipAddress != interfaceIP)) { // Just clear ifFlags, don't modify nicIPAddressCount domainProperties.nicProperties[i].ifFlags = 0; } } domain = new NDDSDomainDerivable(nddsDomainNumber, &domainProperties); In certain OSs, we found that you will need to set a default route in addition to the above code in order for multicast to work. LynxOS and any BSD-derived stacks will require the default route to be added. The added route should cover all IP addresses that aren't otherwise listed in the routing table. Alternately, you can add a route just for the multicast IP space, e.g. (on LynxOS): route add -net 224.0.0.0 -netmask 240.0.0.0 -interface 0 Surprisingly, the routing table won't actually be used by NDDS. We always bind our multicast send sockets to specific interfaces, so the stack should know what interface to use and shouldn't need any information from the routing table. But some stacks always check for a route anyway, or sendto() will fail with EHOSTUNREACH ("No route to host"). On the stacks with this limitation, the route must exist just to make the send "happy".