46   m_socket = socket(AF_INET, SOCK_DGRAM, 0);
 
   51   ROS_INFO(
"Setting socket options...");
 
   53   int result = setsockopt(
m_socket, SOL_SOCKET, SO_REUSEADDR, (
void*)&option_value, 
sizeof(
int));
 
   56     std::stringstream error;
 
   57     error << 
"Failed to set socket option: ";
 
   70       error << 
"ENOPROTOOPT";
 
   76       error << 
"unknown error";
 
   90   ROS_INFO(
"Binding socket to local address...");
 
   94     std::stringstream error;
 
   95     error << 
"Failed to bind socket to local address:" << strerror(errno);
 
  101   mreq.imr_multiaddr.s_addr = inet_addr(multicast_ip.c_str());
 
  103   ROS_INFO(
"Joining multicast group %s...", inet_ntoa(mreq.imr_multiaddr));
 
  105   result = setsockopt(
m_socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (
char *)&mreq, 
sizeof(mreq));
 
  108     std::stringstream error;
 
  109     error << 
"Failed to set socket option: ";
 
  122       error << 
"ENOPROTOOPT";
 
  128       error << 
"unknown error";
 
  135   ROS_INFO(
"Enabling non-blocking I/O");
 
  136   int flags = fcntl(
m_socket, F_GETFL, 0);
 
  137   result = fcntl(
m_socket, F_SETFL, flags | O_NONBLOCK);
 
  140     std::stringstream error;
 
  141     error << 
"Failed to enable non-blocking I/O: " << strerror(errno);
 
  155   sockaddr_in remote_addr;
 
  156   int addr_len = 
sizeof(
struct sockaddr);
 
  157   int status = recvfrom(
 
  162                  (sockaddr *)&remote_addr,
 
  163                  (socklen_t*)&addr_len);
 
  166     ROS_DEBUG(
"%4i bytes received from %s:%i", status, inet_ntoa(remote_addr.sin_addr), ntohs(remote_addr.sin_port));
 
  167   else if (status == 0)
 
  170   HostAddr.sin_addr = remote_addr.sin_addr;