Мое приложение запрашивает видеопоток m3u8 (HLS) через внешний плагин через локальный хост (например, 192.168.0.108:port/foobar.ts).На этом локальном хосте у меня есть прослушивание HttpListener
, которое ловит этот файл и проверяет его.И отправляет команду загрузки для этого файла на сервер.пока файл загружается, он возвращается обратно к плагину с помощью HttpListenerContext.Response.OutputStream()
.если интернет-соединение достаточно быстрое, оно также предварительно загрузит предстоящие фрагменты, если они доступны.
Это работает нормально, пока весь фрагмент .ts загружен.Однако, когда пользователь решает переключить видео, когда он находится в процессе отправки данных через HttpListenerContext.Response.OutputStream()
, это вызывает исключение сокета System.IO.IOException: Unable to write data to the transport connection: The socket has been shut down. ---> System.Net.Sockets.SocketException: The socket has been shut down
.
Всякий раз, когда это происходит, соединение-призрак, кажется, остается открытымна заднем плане, который находится в состоянии CLOSE-WAIT
.это имеет 1 байт в rx_queue в соответствии с /proc/net/tcp
Это соединение не истекает, пока приложение живо, и я, кажется, не могу закрыть его, пока я не уничтожу весь HttpListener.
Простое удаление InputStream и OutputStream и установка контекста на null
также не закрывает соединение
currentContext.Response.OutputStream.Dispose();
currentContext.Request.InputStream.Dispose();
currentContext = null;
Есть ли способ принудительно закрыть это соединение?