remove uTP delayed ack and instead send acks when the udp socket has been drained. simplify the udp socket to use null_buffers and allocate less memory for buffers. this also eliminated the race condition when resizing the udp socket receive buffer which greatly simplified it
This commit is contained in:
@@ -275,6 +275,27 @@ namespace libtorrent
|
||||
return false;
|
||||
}
|
||||
|
||||
void utp_socket_manager::socket_drained()
|
||||
{
|
||||
// flush all deferred acks
|
||||
|
||||
std::vector<utp_socket_impl*> deferred_acks;
|
||||
m_deferred_acks.swap(deferred_acks);
|
||||
for (std::vector<utp_socket_impl*>::iterator i = deferred_acks.begin()
|
||||
, end(deferred_acks.end()); i != end; ++i)
|
||||
{
|
||||
utp_socket_impl* s = *i;
|
||||
utp_send_ack(s);
|
||||
}
|
||||
}
|
||||
|
||||
void utp_socket_manager::defer_ack(utp_socket_impl* s)
|
||||
{
|
||||
TORRENT_ASSERT(std::find(m_deferred_acks.begin(), m_deferred_acks.end(), s)
|
||||
== m_deferred_acks.end());
|
||||
m_deferred_acks.push_back(s);
|
||||
}
|
||||
|
||||
void utp_socket_manager::remove_socket(boost::uint16_t id)
|
||||
{
|
||||
socket_map_t::iterator i = m_utp_sockets.find(id);
|
||||
|
Reference in New Issue
Block a user