Как избежать "SocketException: был использован адрес, несовместимый с запрошенным протоколом".
Я использую websocket-sharp в качестве веб-сервера в проекте. На винде создаю 2 HttpServer
вот так
HttpServer s1 = new HttpServer("http://[::0]:8080") // IPv6
HttpServer s2 = new HttpServer("http://0.0.0.0:8080"); // IPv4
Это работает на всех машинах, которые я тестировал.
Но пользователь сообщил о получении этой ошибки с первой строки
SocketException: An address incompatible with the requested protocol was used.
System.Net.Sockets.Socket..ctor (AddressFamily family, SocketType type, ProtocolType proto)
WebSocketSharp.Net.EndPointListener..ctor (System.Net.IPAddress address, Int32 port, Boolean secure, System.String certificateFolderPath, WebSocketSharp.Net.ServerSslConfiguration sslConfig, Boolean reuseAddress)
WebSocketSharp.Net.EndPointManager.getEndPointListener (System.Net.IPAddress address, Int32 port, Boolean secure, WebSocketSharp.Net.HttpListener listener)
WebSocketSharp.Net.EndPointManager.addPrefix (System.String uriPrefix, WebSocketSharp.Net.HttpListener listener)
Зачем?
Мы думали, что это как-то связано с тем, что на этой машине нет IPv6, но это не так. ipconfig
на этой машине отчеты
Wireless LAN adapter Wi-Fi 2:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Intel(R) Dual Band Wireless-AC 7265 #2
Physical Address. . . . . . . . . : 5C-E0-C5-D7-EA-6A
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : fe80::48f3:fe4f:7b1:5cf4%19(Preferred)
IPv4 Address. . . . . . . . . . . : 10.198.123.252(Preferred)
Кроме того, пытаясь устранить проблему на своих компьютерах, я попытался отключить IPv6 в свойствах сети. На моей машине нет ошибок. Я также пытался отключить IPv6 с помощью этих сценариев от Microsoft. Я подтвердил, что они отключили IPv6 как ipconfig
не показывает данных, связанных с IPv6. У меня до сих пор нет ошибок на моей машине.
Пользователь упомянул, что на его компьютере установлен VMware. Они не запускали мое приложение в VMware, но VMware находится на компьютере и поэтому устанавливает сетевые драйверы.
Поэтому я установил VMware, но все еще без ошибок. Также установите VirtualBox и до сих пор без ошибок.
Они также упомянули, что он работает на их проводном рабочем столе, но не на их ноутбуке с Wi-Fi, поэтому я вышел и взял USB-адаптер Wi-Fi и отключил проводной доступ, но все еще без ошибок. Также попробовал другой ноутбук и Windows 8.1 и Windows 10 (так же, как пользователь)
Я видел этот вопрос, который ссылается на то же сообщение об ошибке, но использует другой API более низкого уровня
Так что мои вопросы
Почему происходит сбой только на одной машине (по сравнению с сотнями это не происходит)
Как определить, когда безопасно выполнить первую строку?