Адрес повторного использования HttpListener? [Дубликат]

Другой способ взглянуть на это: Используются 64 бита для представления чисел. Как следствие, не может быть представлено более 2 ** 64 = 18 446 744 073 709 551 616 различных чисел.

Тем не менее, Math говорит, что существует уже бесконечное число десятичных знаков между 0 и 1. IEE 754 определяет кодировку для эффективного использования этих 64 бит для гораздо большего количества пробелов плюс NaN и +/- Infinity, поэтому есть пробелы между точно представленными числами, заполненными числами, только приближены.

К сожалению, 0,3 сидит в промежутке.

1
задан Mathias R. Jessen 10 February 2016 в 19:36
поделиться

1 ответ

Нет, вы не можете использовать 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, который будет правильно оценен при прерывании)

1
ответ дан Mathias R. Jessen 26 August 2018 в 18:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: