You've already forked lidgren-network-gen3
mirror of
https://github.com/lidgren/lidgren-network-gen3.git
synced 2026-05-17 15:46:33 +09:00
Fixed potential MTU issue; added a bunch of asserts
This commit is contained in:
@@ -62,6 +62,8 @@ namespace Lidgren.Network
|
|||||||
|
|
||||||
internal int GetMTU(IList<NetConnection> recipients)
|
internal int GetMTU(IList<NetConnection> recipients)
|
||||||
{
|
{
|
||||||
|
NetException.Assert(recipients.Count > 0);
|
||||||
|
|
||||||
int mtu = int.MaxValue;
|
int mtu = int.MaxValue;
|
||||||
foreach (NetConnection conn in recipients)
|
foreach (NetConnection conn in recipients)
|
||||||
{
|
{
|
||||||
@@ -85,6 +87,8 @@ namespace Lidgren.Network
|
|||||||
throw new ArgumentNullException("msg");
|
throw new ArgumentNullException("msg");
|
||||||
if (recipients == null)
|
if (recipients == null)
|
||||||
throw new ArgumentNullException("recipients");
|
throw new ArgumentNullException("recipients");
|
||||||
|
if (recipients.Count < 1)
|
||||||
|
throw new NetException("recipients must contain at least one item");
|
||||||
if (method == NetDeliveryMethod.Unreliable || method == NetDeliveryMethod.ReliableUnordered)
|
if (method == NetDeliveryMethod.Unreliable || method == NetDeliveryMethod.ReliableUnordered)
|
||||||
NetException.Assert(sequenceChannel == 0, "Delivery method " + method + " cannot use sequence channels other than 0!");
|
NetException.Assert(sequenceChannel == 0, "Delivery method " + method + " cannot use sequence channels other than 0!");
|
||||||
if (msg.m_isSent)
|
if (msg.m_isSent)
|
||||||
@@ -95,7 +99,7 @@ namespace Lidgren.Network
|
|||||||
msg.m_isSent = true;
|
msg.m_isSent = true;
|
||||||
|
|
||||||
int len = msg.LengthBytes;
|
int len = msg.LengthBytes;
|
||||||
if (len <= m_configuration.MaximumTransmissionUnit)
|
if (len <= mtu)
|
||||||
{
|
{
|
||||||
Interlocked.Add(ref msg.m_recyclingCount, recipients.Count);
|
Interlocked.Add(ref msg.m_recyclingCount, recipients.Count);
|
||||||
foreach (NetConnection conn in recipients)
|
foreach (NetConnection conn in recipients)
|
||||||
@@ -176,6 +180,8 @@ namespace Lidgren.Network
|
|||||||
throw new ArgumentNullException("msg");
|
throw new ArgumentNullException("msg");
|
||||||
if (recipients == null)
|
if (recipients == null)
|
||||||
throw new ArgumentNullException("recipients");
|
throw new ArgumentNullException("recipients");
|
||||||
|
if (recipients.Count < 1)
|
||||||
|
throw new NetException("recipients must contain at least one item");
|
||||||
if (msg.m_isSent)
|
if (msg.m_isSent)
|
||||||
throw new NetException("This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently");
|
throw new NetException("This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently");
|
||||||
if (msg.LengthBytes > m_configuration.MaximumTransmissionUnit)
|
if (msg.LengthBytes > m_configuration.MaximumTransmissionUnit)
|
||||||
|
|||||||
@@ -187,13 +187,15 @@ namespace Lidgren.Network
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the maximum amount of bytes to send in a single packet, excluding ip, udp and lidgren headers
|
/// Gets or sets the maximum amount of bytes to send in a single packet, excluding ip, udp and lidgren headers. Cannot be changed once NetPeer is initialized.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int MaximumTransmissionUnit
|
public int MaximumTransmissionUnit
|
||||||
{
|
{
|
||||||
get { return m_maximumTransmissionUnit; }
|
get { return m_maximumTransmissionUnit; }
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
|
if (m_isLocked)
|
||||||
|
throw new NetException(c_isLockedMessage);
|
||||||
if (value < 1 || value >= ((ushort.MaxValue + 1) / 8))
|
if (value < 1 || value >= ((ushort.MaxValue + 1) / 8))
|
||||||
throw new NetException("MaximumTransmissionUnit must be between 1 and " + (((ushort.MaxValue + 1) / 8) - 1) + " bytes");
|
throw new NetException("MaximumTransmissionUnit must be between 1 and " + (((ushort.MaxValue + 1) / 8) - 1) + " bytes");
|
||||||
m_maximumTransmissionUnit = value;
|
m_maximumTransmissionUnit = value;
|
||||||
|
|||||||
Reference in New Issue
Block a user