Skip to content

Commit

Permalink
Show group member SRC and DST address on reconnection.
Browse files Browse the repository at this point in the history
  • Loading branch information
maxsharabayko committed May 16, 2024
1 parent 7e8858d commit 0204691
Showing 1 changed file with 24 additions and 11 deletions.
35 changes: 24 additions & 11 deletions xtransmit/srt_socket_group.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -479,29 +479,42 @@ void socket::srt_group::on_connect_callback(SRTSOCKET sock, int error, const soc
return;
}

spdlog::warn(LOG_SRT_GROUP "@{} Member socket @{} (token {}) connection error: ({}) {}.", m_bind_socket, sock, token, error,
srt_strerror(error, 0));


SRT_SOCKGROUPCONFIG* member = nullptr;

bool reconn_scheduled = false;
for (auto target : m_targets)
{
if (target.token != token)
continue;

auto connfn = [](SRTSOCKET group, SRT_SOCKGROUPCONFIG target) {
spdlog::trace(LOG_SRT_GROUP "@{}: Reconnecting member socket (token {})", group, target.token);
const int st = srt_connect_group(group, &target, 1);
if (st == SRT_ERROR)
spdlog::warn(LOG_SRT_GROUP "@{}: Member reconnection failed (token {})", group, target.token);
member = ⌖
break;
}

auto connfn = [](SRTSOCKET group, SRT_SOCKGROUPCONFIG target) {
spdlog::trace(LOG_SRT_GROUP "@{}: Reconnecting member socket (token {})", group, target.token);
const int st = srt_connect_group(group, &target, 1);
if (st == SRT_ERROR)
spdlog::warn(LOG_SRT_GROUP "@{}: Member reconnection failed (token {})", group, target.token);
};

spdlog::trace(LOG_SRT_GROUP "@{}: Scheduling member reconnection (token {})", m_bind_socket, token);
if (member)
{
spdlog::warn(LOG_SRT_GROUP "@{} Member socket @{} ({}->{}) connection error: ({}) {}.", m_bind_socket, sock,
netaddr_any(member->srcaddr).str(), netaddr_any(member->peeraddr).str(), error,
srt_strerror(error, 0));

spdlog::trace(LOG_SRT_GROUP "@{}: Scheduling member reconnection ({} -> {})", m_bind_socket,
netaddr_any(member->srcaddr).str(), netaddr_any(member->peeraddr).str());
reconn_scheduled = true;
m_scheduler.schedule_in(std::chrono::seconds(1), connfn, m_bind_socket, target);
m_scheduler.schedule_in(std::chrono::seconds(1), connfn, m_bind_socket, *member);
}

if (!reconn_scheduled)
else
{
spdlog::warn(LOG_SRT_GROUP "@{}: Could not schedule member reconnection (token {})", m_bind_socket, token);
}

return;
}
Expand Down

0 comments on commit 0204691

Please sign in to comment.