Skip to content
Snippets Groups Projects
Commit 04d1c5e2 authored by dnsadmin's avatar dnsadmin
Browse files

Recvfrom exeptiont dob, ha hiba van (#11)

parent 13e3219b
No related branches found
No related tags found
No related merge requests found
...@@ -132,8 +132,15 @@ int main(int argc, char *argv[]) ...@@ -132,8 +132,15 @@ int main(int argc, char *argv[])
for(command c : command_list) for(command c : command_list)
{ {
comm_link.send_data(get_readable_command(c)); comm_link.send_data(get_readable_command(c));
try {
log_on_demand(LOG_INFO, "Answer received: %s", comm_link.recv_data().c_str()); 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); exit(EXIT_SUCCESS);
} }
...@@ -173,6 +180,7 @@ int main(int argc, char *argv[]) ...@@ -173,6 +180,7 @@ int main(int argc, char *argv[])
bool stop = false; bool stop = false;
while(!stop) while(!stop)
{ {
try {
if(comm_link.recv_data() == "kill") if(comm_link.recv_data() == "kill")
{ {
comm_link.send_data("go to hell!"); comm_link.send_data("go to hell!");
...@@ -181,6 +189,8 @@ int main(int argc, char *argv[]) ...@@ -181,6 +189,8 @@ int main(int argc, char *argv[])
else else
comm_link.send_data("nothing has happened"); comm_link.send_data("nothing has happened");
} }
catch(const char*) { }
}
// ---------------- SERVE END ------------------------- // ---------------- SERVE END -------------------------
// ------------------- SHUTDOWN ------------------------- // ------------------- SHUTDOWN -------------------------
......
...@@ -43,10 +43,6 @@ IPC_US_communicator::~IPC_US_communicator() { ...@@ -43,10 +43,6 @@ IPC_US_communicator::~IPC_US_communicator() {
std::string IPC_US_communicator::recv_data() { std::string IPC_US_communicator::recv_data() {
udp_packet_wp data = comm_sock.recvfrom_wp(NULL, NULL); udp_packet_wp data = comm_sock.recvfrom_wp(NULL, NULL);
if(data.get_buf() == 0)
{
// May throw some exception...
}
return data.get_buf(); return data.get_buf();
} }
......
...@@ -77,9 +77,11 @@ void dns_server::serve_one_request() { ...@@ -77,9 +77,11 @@ void dns_server::serve_one_request() {
struct sockaddr_in6 sender; struct sockaddr_in6 sender;
socklen_t slen = sizeof(sender); socklen_t slen = sizeof(sender);
dns_message_em query; dns_message_em query;
udp_packet_wp received_packet = this->socket.recvfrom_wp((sockaddr*) &sender, &slen); udp_packet_wp received_packet;
if(received_packet.get_buf_len() <= 0) try {
return; received_packet = this->socket.recvfrom_wp((sockaddr*) &sender, &slen);
}
catch(const char*) { return; }
try { try {
received_packet>>query; received_packet>>query;
} }
......
...@@ -48,12 +48,7 @@ udp_packet_wp udp_socket_wp::recvfrom_wp(sockaddr *sender_address, socklen_t* se ...@@ -48,12 +48,7 @@ udp_packet_wp udp_socket_wp::recvfrom_wp(sockaddr *sender_address, socklen_t* se
ssize_t len; ssize_t len;
if((len = recvfrom(fd, buf, MAX_UDP_PACKET_SIZE_BYTES, MSG_WAITFORONE, if((len = recvfrom(fd, buf, MAX_UDP_PACKET_SIZE_BYTES, MSG_WAITFORONE,
sender_address, sender_address_len)) < 0) sender_address, sender_address_len)) < 0)
{ throw strerror(errno);
if(verbose)
PERROR_ON_DEMAND("recvfrom");
msg.set_buf(NULL, 0);
}
else
msg.set_buf(buf, len); msg.set_buf(buf, len);
msg.address.set_sockaddr(sender_address, (sender_address_len != NULL) ? *sender_address_len : 0); msg.address.set_sockaddr(sender_address, (sender_address_len != NULL) ? *sender_address_len : 0);
return msg; return msg;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment