Причины ошибки сокета TCPClient 0x80004005 - PullRequest
0 голосов
/ 25 сентября 2018

"System.Net.Sockets.SocketException (0x80004005): была сделана попытка доступа к сокету способом, запрещенным его правами доступа"

ОК. Я знаю, что эта проблема имеетслучалось много раз до этого на SO, но я не могу найти решение.Вот мой вопрос: каковы возможные причины этого.

Очки:

  • Бывает независимо от брандмауэра
  • Порты открыты
  • Пункт назначенияоткрытые и соединения работали в прошлом
  • Поскольку работающие соединения, никакие изменения в брандмауэрах или антивирусных сканерах не могут их исключить.
  • Запуск от имени администратора
  • Исходный порт23876
  • Порт назначения является переменным, зависит от обнаруженного клиента из другого источника
  • Windows 8.1

Еще один момент - эта ошибка также произошла после переноса на .NETCore.

Единственное изменение состоит в том, что я пытаюсь разделить порты, но не вижу связи между этим и ошибкой. Код для подключения:

 client = new TcpClient();
                         client.Client.SetSocketOption(
                             SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                         client.Client.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, 0);
                         client.Client.Bind(ipLocalEndPoint);
                         client.Client.Connect(ep);

, где локальныйконечная точка используется повторно.

Каковы возможные причины этой ошибки?Это происходит при каждом вызове BIND.

1 Ответ

0 голосов
/ 25 сентября 2018

ОК, все это оказалось, что я невероятно глуп.

То, что я сделал и забыл, что сделал, - установил TcpListener на тот же порт, с этим кодом _tcpListener.ExclusiveAddressUse = false;, который не работает, как я ожидал.

...