Сокеты: иногда (редко) пакеты теряются при получении
я используюSocket
получать данные от многоадресной рассылки udp. Код тривиален:
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
....
while (true)
{
int count = 0;
try
{
count = socket.Receive(byteArray);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return;
}
if (count > 0)
{
OnNewMessage(new NewMessageEventArgs(byteArray, count));
}
}
Проблема в том, что иногда я теряю пакеты. Не слишком часто, ~ раз в 2 минуты.
Я уверен, что пакет прибыл, потому что я вижу его в другой программе C ++, запущенной на том же компьютере и настроенной на получение тех же пакетов.
Почему моя программа не может поймать пакеты, которые могут другие? Почему я теряю пакеты? Возможно ли, что компьютер слишком медленный (или слишком занят) для приема пакетов?
Я получаю около 2000 пакетов в секунду и использую процессор Xeon E3, этого должно быть достаточно, я думаю ...