1
0
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:
lidgren
2011-09-16 07:28:37 +00:00
parent c1d604bde4
commit 62d8c6826b
2 changed files with 10 additions and 2 deletions

View File

@@ -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)

View File

@@ -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;