From 04d1c5e25e35549abba80c0495ec7cfd8c5544a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eckl=2C=20M=C3=A1t=C3=A9?= <ecklm94@gmail.com> Date: Fri, 27 May 2016 10:26:47 +0200 Subject: [PATCH] Recvfrom exeptiont dob, ha hiba van (#11) --- main.cpp | 24 +++++++++++++++++------- src/IPC_US_communicator.cpp | 4 ---- src/dns_server.cpp | 8 +++++--- src/udp_socket_wp.cpp | 9 ++------- 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/main.cpp b/main.cpp index 0071412..fabae05 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 4f552a1..35973fe 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 d06c37c..e4598cf 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 7a76db5..6d2e0fc 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; } -- GitLab