when dig is interrupted with SIGINT while a UDP connection is still pending, it hangs due to recv_done() never being called. adding an extra handle detach in cancel_all() corrects this, but is probably not the correct way to fix it.