From 5bbca8f517fa8dcc7d2c9a5c5436e2b28a7800c8 Mon Sep 17 00:00:00 2001 From: loki Date: Tue, 17 Mar 2020 18:01:12 +0100 Subject: [PATCH] Don't exit when udp::socket connection refused --- sunshine/stream.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sunshine/stream.cpp b/sunshine/stream.cpp index 208ae57e..9f6092a4 100644 --- a/sunshine/stream.cpp +++ b/sunshine/stream.cpp @@ -545,12 +545,21 @@ void recvThread(broadcast_ctx_t &ctx) { auto recv_func_init = [&](udp::socket &sock, int buf_elem, std::map &peer_to_session) { recv_func[buf_elem] = [&,buf_elem](const boost::system::error_code &ec, size_t bytes) { + auto fg = util::fail_guard([&]() { + sock.async_receive_from(asio::buffer(buf[buf_elem]), peer, 0, recv_func[buf_elem]); + }); + auto type_str = buf_elem ? "AUDIO"sv : "VIDEO"sv; BOOST_LOG(debug) << "Recv: "sv << peer.address().to_string() << ":"sv << peer.port() << " :: " << type_str; populate_peer_to_session(); + // No data, yet no error + if(ec == boost::system::errc::connection_refused || ec == boost::system::errc::connection_reset) { + return; + } + if(ec || !bytes) { BOOST_LOG(fatal) << "Couldn't receive data from udp socket: "sv << ec.message(); @@ -563,8 +572,6 @@ void recvThread(broadcast_ctx_t &ctx) { BOOST_LOG(debug) << "RAISE: "sv << peer.address().to_string() << ":"sv << peer.port() << " :: " << type_str; it->second->raise(peer.port(), std::string { buf[buf_elem].data(), bytes }); } - - sock.async_receive_from(asio::buffer(buf[buf_elem]), peer, 0, recv_func[buf_elem]); }; };