diff --git a/lib/modules/Protocols.pmod/DNS.pmod b/lib/modules/Protocols.pmod/DNS.pmod index 42a560bdc5df399b560dc312f6e425a4819d0544..dbca38c7e49b5a3852221be24b24393683b06a91 100644 --- a/lib/modules/Protocols.pmod/DNS.pmod +++ b/lib/modules/Protocols.pmod/DNS.pmod @@ -525,14 +525,21 @@ class async_client static private void rec_data() { - mapping m=udp::read(); - if(m->port != 53 || search(nameservers, m->ip) == -1) return; - sscanf(m->data,"%2c",int id); - object r=requests[id]; - if(!r) return; - m_delete(requests,id); - r->callback(r->domain,decode_res(m->data),@r->args); - destruct(r); + mixed err; + if (err = catch { + mapping m=udp::read(); + if(m->port != 53 || search(nameservers, m->ip) == -1) return; + sscanf(m->data,"%2c",int id); + object r=requests[id]; + if(!r) return; + m_delete(requests,id); + r->callback(r->domain,decode_res(m->data),@r->args); + destruct(r); + }) { + werror(sprintf("DNS: Failed to read UDP packet. Connection refused?\n" + "%s\n", + describe_backtrace(err))); + } } static private void generic_get(string d,