Порты 1
- 1024
по умолчанию требуют административного доступа.В противном случае вы получите код ошибки 5 (ACCESS_DENIED
).Если вы попытаетесь подключиться к порту выше 1024, например:
http://localhost:8080/
, будет работать для пользователей без прав администратора.В вашем случае вы пытались прослушивать порт 80
, который HttpServer API ограничивает для администраторов.
Все в Windows контролируется списками контроля доступа (ACL);это включает порты прослушивания, разрешенные при использовании HttpServer.Вы можете отобразить текущие ACL, используемые http, запустив:
>netsh http show urlacl
Если вы сделаете это, вы увидите множество ACL, уже определенных различными системами.
Windows Communication Foundation
Одна запись ACL особенно интересна:
Reserved URL : http://+:80/Temporary_Listen_Addresses/
User: \Everyone
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;WD)
Всем предоставляется право прослушивать порт 80
, пока вы живете.из:
/Temporary_Listen_Addresses/
Этот URL-адрес используется Windows Communication Foundation (WCF), который обычно создает URL-адрес в виде:
http://+:80/Temporary_Listen_Addresses/{random-guid}/
Это также означает, что если вы на самом деле хотите порт 80, вы можете слушать его самостоятельно, например:
http://localhost:80/Temporary_Listen_Addresses/64E3DCC6-FE47-4A86-87F4-48D2E1B44AE9/
Пока никто не использует порт 80 (я смотрю на ваш Skype!), вы будетеполучите.
Для прослушивающих сокетов WinSock не требуется admin
. Хотя HttpServer API имеет ACL, управляющие доступом к портам ниже 1024
, следует отметить, что WinSock API не имеет ограничений.1041 *
Если вы хотите использовать WinSock для открытия прослушивающего сокета на порту 80
, вам не нужно быть администратором.ACL имеет только Http
API.