int Echo_Handler::handle_input (ACE_HANDLE) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) Echo_Handler::handle_input - ") ACE_TEXT ("activity occurred on handle %d!\n"), this->ping_socket ().get_handle ())); ACE_TCHAR buf[BUFSIZ]; ACE_OS::memset (buf, 0, sizeof buf); ACE_INET_Addr addr; int rval_recv = -1; // Receive an <n> byte <buf> from the datagram socket // (uses<recvfrom(3)>). rval_recv = this->ping_socket ().recv (this->ping_socket ().icmp_recv_buff (), ACE_Ping_Socket::PING_BUFFER_SIZE, addr); switch (rval_recv) { case -1: // Complain and leave, but keep registered, returning 0. ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("(%P|%t) Echo_Handler::handle_input - ") ACE_TEXT ("%p: bad read\n"), ACE_TEXT ("client")), 0); // NOTREACHED case 0: // Complain and leave ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("(%P|%t) Echo_Handler::handle_input - ") ACE_TEXT ("closing daemon (fd = %d)\n"), this->get_handle ()), 0); // NOTREACHED default: ACE_DEBUG ((LM_INFO, ACE_TEXT ("(%P|%t) Echo_Handler::handle_input - ") ACE_TEXT ("message from %d bytes received.\n"), rval_recv)); if (! this->ping_socket ().process_incoming_dgram ( this->ping_socket ().icmp_recv_buff (), rval_recv)) { for (size_t k = 0; k <this->number_remotes_; ++k) { if (addr.is_ip_equal (this->remote_addrs_[k])) { if (addr.addr_to_string (buf, sizeof buf) == -1) { ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("can't obtain peer's address"))); } else { ACE_DEBUG ((LM_INFO, ACE_TEXT ("(%P|%t) Echo_Handler::handle_input - ") ACE_TEXT ("ECHO_REPLY received ") ACE_TEXT ("from %s; marking this peer alive\n"), buf)); } // mark as successful this->success_status_[k] = 0; break; } } } break; } return 0; }