Другой способ взглянуть на это: Используются 64 бита для представления чисел. Как следствие, не может быть представлено более 2 ** 64 = 18 446 744 073 709 551 616 различных чисел.
Тем не менее, Math говорит, что существует уже бесконечное число десятичных знаков между 0 и 1. IEE 754 определяет кодировку для эффективного использования этих 64 бит для гораздо большего количества пробелов плюс NaN и +/- Infinity, поэтому есть пробелы между точно представленными числами, заполненными числами, только приближены.
К сожалению, 0,3 сидит в промежутке.
Нет, вы не можете использовать SO_REUSEADDR
с HttpListener
.
Причина в том, что HttpListener
фактически не управляет базовым сокетом - он просто регистрирует префиксы на уровне приложения с драйвер HTTP.sys
, который, в свою очередь, управляет базовым соединением.
Чтобы использовать SO_REUSEADDR
, вы можете создать TcpListener
и установить опцию сокета в базовом сокете (доступный через свойство Server
) с помощью SetSocketOption()
:
$TcpListener = New-Object System.Net.Sockets.TcpListener 9999
$TcpListener.Server.SetSocketOption("Socket", "ReuseAddress", 1)
$TcpListener.Start()
Но теперь вы должны реализовать все удобные вещи, которые HttpListener
предоставляет вам самостоятельно (анализ заголовков, проверка содержимого и т. д.). ).
Это говорит о том, что это может решить практическую проблему, с которой вы сталкиваетесь:
try{
$Listener.Start()
}
catch{
}
finally{
$Listener.Stop()
$Listener.Dispose()
}
(не вставляйте это в приглашение / ISE, вам нужно сохраните это в скрипте или заключите в блок сценария для finally
, который будет правильно оценен при прерывании)