diff --git a/main.cpp b/main.cpp index 00714127f102f254f88fc598683b7f76170ea591..fabae055bf431b53fddef9d15c143ca670c7a4cb 100644 --- a/main.cpp +++ b/main.cpp @@ -132,7 +132,14 @@ int main(int argc, char *argv[]) for(command c : command_list) { comm_link.send_data(get_readable_command(c)); - log_on_demand(LOG_INFO, "Answer received: %s", comm_link.recv_data().c_str()); + try { + log_on_demand(LOG_INFO, "Answer received: %s", comm_link.recv_data().c_str()); + } + catch(const char*) { + log_on_demand(LOG_ERR, + "Answer not received within timeout time. " + "Server may have already been killed."); + } } exit(EXIT_SUCCESS); } @@ -173,13 +180,16 @@ int main(int argc, char *argv[]) bool stop = false; while(!stop) { - if(comm_link.recv_data() == "kill") - { - comm_link.send_data("go to hell!"); - stop = true; + try { + if(comm_link.recv_data() == "kill") + { + comm_link.send_data("go to hell!"); + stop = true; + } + else + comm_link.send_data("nothing has happened"); } - else - comm_link.send_data("nothing has happened"); + catch(const char*) { } } // ---------------- SERVE END ------------------------- diff --git a/src/IPC_US_communicator.cpp b/src/IPC_US_communicator.cpp index 4f552a1b288907ddfd3a7143f494c273966a9da3..35973fe83d7626ddb67b04d995bd511ab9aa9f67 100644 --- a/src/IPC_US_communicator.cpp +++ b/src/IPC_US_communicator.cpp @@ -43,10 +43,6 @@ IPC_US_communicator::~IPC_US_communicator() { std::string IPC_US_communicator::recv_data() { udp_packet_wp data = comm_sock.recvfrom_wp(NULL, NULL); - if(data.get_buf() == 0) - { - // May throw some exception... - } return data.get_buf(); } diff --git a/src/dns_server.cpp b/src/dns_server.cpp index d06c37c472b93ad3d23ace8648edfb680c451c35..e4598cf1083d8731f607dada590cf9eacc85c6ef 100644 --- a/src/dns_server.cpp +++ b/src/dns_server.cpp @@ -77,9 +77,11 @@ void dns_server::serve_one_request() { struct sockaddr_in6 sender; socklen_t slen = sizeof(sender); dns_message_em query; - udp_packet_wp received_packet = this->socket.recvfrom_wp((sockaddr*) &sender, &slen); - if(received_packet.get_buf_len() <= 0) - return; + udp_packet_wp received_packet; + try { + received_packet = this->socket.recvfrom_wp((sockaddr*) &sender, &slen); + } + catch(const char*) { return; } try { received_packet>>query; } diff --git a/src/udp_socket_wp.cpp b/src/udp_socket_wp.cpp index 7a76db5e38f8b1301bc9ce31f30845ac2f4b8e39..6d2e0fca5d04007e76f0dfd536084135087408f1 100644 --- a/src/udp_socket_wp.cpp +++ b/src/udp_socket_wp.cpp @@ -48,13 +48,8 @@ udp_packet_wp udp_socket_wp::recvfrom_wp(sockaddr *sender_address, socklen_t* se ssize_t len; if((len = recvfrom(fd, buf, MAX_UDP_PACKET_SIZE_BYTES, MSG_WAITFORONE, sender_address, sender_address_len)) < 0) - { - if(verbose) - PERROR_ON_DEMAND("recvfrom"); - msg.set_buf(NULL, 0); - } - else - msg.set_buf(buf, len); + throw strerror(errno); + msg.set_buf(buf, len); msg.address.set_sockaddr(sender_address, (sender_address_len != NULL) ? *sender_address_len : 0); return msg; }