"Операция сокета не может быть выполнена, потому что в системе недостаточно места для буфера или потому, что очередь заполнена"

В С# я написал приложение многоадресной рассылки IP. Он компилируется отлично, но во время выполнения эта строка:

sock.SetSocketOption(SocketOptionLevel.IP,
                     SocketOptionName.AddMembership,
                     new MulticastOption(IPAddress.Parse("224.100.0.1")));

генерирует исключение необработанного сокета:

Операция сокета не может быть выполнена, поскольку в системе недостаточно места для буфера или потому, что очередь была заполнена

Я искал ошибку в Google, и люди предложили удалить переключатель 3GB (моя ОС - Windows 7), который, возможно, был включен. Я сделал это, но все равно получаю ту же ошибку. В чем может быть проблема?

Ответы

Ответ 1

Это может быть истощение порта. Когда приложение делает слишком много исходящих подключений в короткий промежуток времени или неправильно отключает исходящие соединения - вы исчерпали порты.

Здесь есть ссылка на довольно длительное объяснение и способ диагностики проблемы

Ответ 2

Это происходит, когда у вас заканчиваются ресурсы (сокеты?) или память. В командной строке выполните: netstat -ab

Я не уверен, что такое ограничение на сокет. В настоящее время я сам борюсь с такой проблемой.

Примечания о ограничениях на сокеты: http://support.microsoft.com/kb/196271

Ответ 3

Вы можете встретить это сообщение об ошибке, если пределы ресурсов превышены. A System.Net.Sockets.Socket реализует IDisposable. Вы удаляете свои сокеты (ы), когда закончите с ними?

Оставить их вокруг сборщика мусора - отличный способ утечки ресурсов.

Ответ 4

У меня есть эта же ошибка, но только на Windows 7. Если я запускаю одно и то же многоадресное приложение в Vista, это работает. Появляется системный диалог, чтобы разблокировать поведение приложения, но он запускается. Вероятно, это измененная сетевая разрешающая способность в win7. Я все еще ищу решение. Если кто-то другой найдет его, напишите.

Ответ 5

У меня была такая же ошибка в Windows Server 2008. В моем случае после перезапуска проблема решена с помощью проблемы с сервером (2 года).

Ответ 6

см. - http://support.microsoft.com/kb/2553549 и https://support.microsoft.com/en-us/kb/929851 (вы определяете, сколько динамических портов выходов вы хотите). Наряду с этой второй статьей, установите значение TcpTimedWaitDelay равным десятичному значению в 30 раз. Поэтому, когда сокеты будут выпущены в систему, ясность быстрее. См. - technet.microsoft.com/en-us/library/cc938217.aspx

Ответ 7

У меня была такая же проблема (ошибка 10055 a.k.a) при попытке подключиться к локальной базе данных MySQL. Я считаю, что вам нужно увеличить количество динамических портов, доступных операционной системой.

Решение, которое сработало для меня, было упомянуто здесь Я считаю, что это тоже поможет вам, поскольку вы используете Windows. Удачи!