public UdpNetworkProtocol(
Log log,
Statistics statistics,
IPEndPoint destinationEndPoint,
UdpNetworkProtocolType udpNetworkProtocolType,
int packetDataSize,
bool verifyOrder)
{
_log = log;
_statistics = statistics;
_packetDataSize = packetDataSize;
_verifyOrder = verifyOrder;
if (verifyOrder && _packetDataSize < PacketNumberTypeLength)
throw new ArgumentOutOfRangeException(
"packetDataSize",
packetDataSize,
"Order verification require packet size bigger than " + PacketNumberTypeLength + ".");
_sendBuffer = Enumerable.Repeat<byte>(0xFE, _packetDataSize).ToArray();
_listenCancelToken = new CancellationTokenSource();
DestinationEndPoint = destinationEndPoint;
SocketType socketType;
ProtocolType protocolType;
switch (udpNetworkProtocolType)
{
case UdpNetworkProtocolType.Udp:
socketType = SocketType.Dgram;
protocolType = ProtocolType.Udp;
break;
case UdpNetworkProtocolType.Pgm:
socketType = SocketType.Rdm;
protocolType = (ProtocolType)113;
break;
default:
throw new ArgumentOutOfRangeException("udpNetworkProtocolType");
}
_socket = new Socket(AddressFamily.InterNetwork, socketType, protocolType);
}