From b0bfd87e9f8fc5a8a3078d76ef2d6d33af0dc06f Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 29 Nov 2018 19:16:05 -0800 Subject: [PATCH] ircd::net: Support interruption of UDP listening. --- ircd/net.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ircd/net.cc b/ircd/net.cc index f04ee774a..0fb7625a0 100644 --- a/ircd/net.cc +++ b/ircd/net.cc @@ -1706,6 +1706,17 @@ ircd::net::listener_udp::acceptor::operator()(datagram &datagram) { assert(ctx::current); + const auto flags + { + this->flags(datagram.flag) + }; + + const auto interruption{[this] + (ctx::ctx *const &) noexcept + { + this->interrupt(); + }}; + this->waiting++; const unwind dec{[this] { @@ -1715,7 +1726,7 @@ ircd::net::listener_udp::acceptor::operator()(datagram &datagram) ip::udp::endpoint ep; const size_t rlen { - a.async_receive_from(datagram.mbufs, ep, flags(datagram.flag), yield_context{to_asio{}}) + a.async_receive_from(datagram.mbufs, ep, flags, yield_context{to_asio{interruption}}) }; datagram.remote = make_ipport(ep);