mirror of
https://github.com/transmission/transmission
synced 2024-12-27 01:57:52 +00:00
fix: 4.0.0 regression that broke speed limits for utp peers (#5086)
This commit is contained in:
parent
f267f95ec1
commit
f53e58c8bd
1 changed files with 10 additions and 1 deletions
|
@ -733,7 +733,16 @@ void tr_peerIo::utp_init([[maybe_unused]] struct_utp_context* ctx)
|
||||||
{
|
{
|
||||||
if (auto const* const io = static_cast<tr_peerIo*>(utp_get_userdata(args->socket)); io != nullptr)
|
if (auto const* const io = static_cast<tr_peerIo*>(utp_get_userdata(args->socket)); io != nullptr)
|
||||||
{
|
{
|
||||||
return std::size(io->inbuf_);
|
// We use this callback to enforce speed limits by telling
|
||||||
|
// libutp to read no more than `target_dl_bytes` bytes.
|
||||||
|
auto const target_dl_bytes = io->bandwidth_.clamp(TR_DOWN, RcvBuf);
|
||||||
|
|
||||||
|
// libutp's private function get_rcv_window() allows libutp
|
||||||
|
// to read up to (UTP_RCVBUF - READ_BUFFER_SIZE) bytes and
|
||||||
|
// UTP_RCVBUF is set to `RcvBuf` by tr_peerIo::utp_init().
|
||||||
|
// So to limit dl to `target_dl_bytes`, we need to return
|
||||||
|
// N where (`target_dl_bytes` == RcvBuf - N).
|
||||||
|
return RcvBuf - target_dl_bytes;
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue