mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-24 22:44:15 +00:00
derive SSU2 socket buffer size from bandwidth limit
This commit is contained in:
parent
dbc3952654
commit
89f9bec49a
@ -256,27 +256,32 @@ namespace transport
|
|||||||
socket.open (localEndpoint.protocol ());
|
socket.open (localEndpoint.protocol ());
|
||||||
if (localEndpoint.address ().is_v6 ())
|
if (localEndpoint.address ().is_v6 ())
|
||||||
socket.set_option (boost::asio::ip::v6_only (true));
|
socket.set_option (boost::asio::ip::v6_only (true));
|
||||||
boost::asio::socket_base::receive_buffer_size receive_buffer_size_set (SSU2_SOCKET_RECEIVE_BUFFER_SIZE);
|
|
||||||
boost::asio::socket_base::send_buffer_size send_buffer_size_set (SSU2_SOCKET_SEND_BUFFER_SIZE);
|
uint64_t bufferSize = i2p::context.GetBandwidthLimit() * 1024 / 5; // max lag = 200ms
|
||||||
socket.set_option (receive_buffer_size_set);
|
bufferSize = std::max(SSU2_SOCKET_MIN_BUFFER_SIZE, std::min(bufferSize, SSU2_SOCKET_MAX_BUFFER_SIZE));
|
||||||
socket.set_option (send_buffer_size_set);
|
|
||||||
boost::asio::socket_base::receive_buffer_size receive_buffer_size_get;
|
boost::asio::socket_base::receive_buffer_size receiveBufferSizeSet (bufferSize);
|
||||||
boost::asio::socket_base::send_buffer_size send_buffer_size_get;
|
boost::asio::socket_base::send_buffer_size sendBufferSizeSet (bufferSize);
|
||||||
socket.get_option (receive_buffer_size_get);
|
socket.set_option (receiveBufferSizeSet);
|
||||||
socket.get_option (send_buffer_size_get);
|
socket.set_option (sendBufferSizeSet);
|
||||||
if (receive_buffer_size_get.value () != receive_buffer_size_set.value () ||
|
boost::asio::socket_base::receive_buffer_size receiveBufferSizeGet;
|
||||||
send_buffer_size_get.value () != send_buffer_size_set.value ())
|
boost::asio::socket_base::send_buffer_size sendBufferSizeGet;
|
||||||
|
socket.get_option (receiveBufferSizeGet);
|
||||||
|
socket.get_option (sendBufferSizeGet);
|
||||||
|
if (receiveBufferSizeGet.value () != receiveBufferSizeSet.value () ||
|
||||||
|
sendBufferSizeGet.value () != sendBufferSizeSet.value ())
|
||||||
{
|
{
|
||||||
LogPrint (eLogWarning, "SSU2: Socket receive buffer size: requested = ",
|
LogPrint (eLogWarning, "SSU2: Socket receive buffer size: requested = ",
|
||||||
receive_buffer_size_set.value (), ", got = ", receive_buffer_size_get.value ());
|
receiveBufferSizeSet.value (), ", got = ", receiveBufferSizeGet.value ());
|
||||||
LogPrint (eLogWarning, "SSU2: Socket send buffer size: requested = ",
|
LogPrint (eLogWarning, "SSU2: Socket send buffer size: requested = ",
|
||||||
send_buffer_size_set.value (), ", got = ", send_buffer_size_get.value ());
|
sendBufferSizeSet.value (), ", got = ", sendBufferSizeGet.value ());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogPrint (eLogInfo, "SSU2: Socket receive buffer size: ", receive_buffer_size_get.value ());
|
LogPrint (eLogInfo, "SSU2: Socket receive buffer size: ", receiveBufferSizeGet.value ());
|
||||||
LogPrint (eLogInfo, "SSU2: Socket send buffer size: ", send_buffer_size_get.value ());
|
LogPrint (eLogInfo, "SSU2: Socket send buffer size: ", sendBufferSizeGet.value ());
|
||||||
}
|
}
|
||||||
|
|
||||||
socket.non_blocking (true);
|
socket.non_blocking (true);
|
||||||
}
|
}
|
||||||
catch (std::exception& ex )
|
catch (std::exception& ex )
|
||||||
|
@ -25,8 +25,8 @@ namespace transport
|
|||||||
const int SSU2_RESEND_CHECK_TIMEOUT_VARIANCE = 100; // in milliseconds
|
const int SSU2_RESEND_CHECK_TIMEOUT_VARIANCE = 100; // in milliseconds
|
||||||
const int SSU2_RESEND_CHECK_MORE_TIMEOUT = 10; // in milliseconds
|
const int SSU2_RESEND_CHECK_MORE_TIMEOUT = 10; // in milliseconds
|
||||||
const size_t SSU2_MAX_RESEND_PACKETS = 128; // packets to resend at the time
|
const size_t SSU2_MAX_RESEND_PACKETS = 128; // packets to resend at the time
|
||||||
const size_t SSU2_SOCKET_RECEIVE_BUFFER_SIZE = 0x1FFFF; // 128K
|
const uint64_t SSU2_SOCKET_MIN_BUFFER_SIZE = 128 * 1024;
|
||||||
const size_t SSU2_SOCKET_SEND_BUFFER_SIZE = 0x1FFFF; // 128K
|
const uint64_t SSU2_SOCKET_MAX_BUFFER_SIZE = 4 * 1024 * 1024;
|
||||||
const size_t SSU2_MAX_NUM_INTRODUCERS = 3;
|
const size_t SSU2_MAX_NUM_INTRODUCERS = 3;
|
||||||
const size_t SSU2_MIN_RECEIVED_PACKET_SIZE = 40; // 16 byte short header + 8 byte minimum payload + 16 byte MAC
|
const size_t SSU2_MIN_RECEIVED_PACKET_SIZE = 40; // 16 byte short header + 8 byte minimum payload + 16 byte MAC
|
||||||
const int SSU2_TO_INTRODUCER_SESSION_DURATION = 3600; // 1 hour
|
const int SSU2_TO_INTRODUCER_SESSION_DURATION = 3600; // 1 hour
|
||||||
|
Loading…
x
Reference in New Issue
Block a user