int TAO_ECG_Mcast_EH::delete_unwanted_subscriptions ( Address_Set& multicast_addresses) { for (size_t i = 0; i < this->subscriptions_.size (); ++i) { ACE_INET_Addr multicast_group = this->subscriptions_[i].mcast_addr; if (multicast_addresses.find (multicast_group)) { // Remove from the list of subscriptions to be added, // because we already subscribe to it... (void) multicast_addresses.remove (multicast_group); continue; } // This subscription is no longer needed - remove from reactor, // close and delete the socket. ACE_SOCK_Dgram_Mcast *socket = this->subscriptions_[i].dgram; (void) this->reactor ()->remove_handler (socket->get_handle (), ACE_Event_Handler::READ_MASK); (void) socket->close(); delete socket; // Move the deleted subscription out of the <subscriptions_> // array by moving the last subscription in array into its place. this->subscriptions_[i] = this->subscriptions_[this->subscriptions_.size () - 1]; this->subscriptions_.size (this->subscriptions_.size () - 1); --i; } return 0; }
int send_multicast (const ACE_INET_Addr &mcast_addr) { const char *message = "this is the message!\n"; ACE_SOCK_Dgram_Mcast udp; if (-1 == udp.join (mcast_addr)) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("join")), -1); ssize_t sent = udp.send (message, ACE_OS::strlen (message) + 1); udp.close (); if (sent == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("send")), -1); return 0; }