我的应用程序正在通过本地主机上的外部插件请求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中有1个字节
只要该应用程序处于活动状态,此连接就不会超时,并且除非我杀死整个HttpListener,否则我似乎无法将其关闭。
简单地处理InputStream和OutputStream,并将上下文设置为/proc/net/tcp
也不会关闭连接
null
有没有办法强制关闭此连接?