"Операция сокета не может быть выполнена, потому что в системе недостаточно места для буфера или потому, что очередь заполнена"
В С# я написал приложение многоадресной рассылки 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.
Удачи!