在读取端收到关闭后,需要帮助写入套接字

本文关键字:帮助 套接字 读取 | 更新日期: 2023-09-27 18:30:09

我正试图在C#中实现HTTP代理,作为我正在开发的整体业务应用程序的一部分,但遇到了以下难题。

HTTP标准的一部分规定浏览器可以发出套接字关闭(SocketShutdown.Send),此时服务器将向浏览器传递任何剩余数据,并关闭自己的套接字的一半。当浏览器半关闭连接时,我在套接字的接收端得到了预期的行为,即Select()表示套接字是可读的,但使用Receive()从套接字读取返回零字节。但是,当我尝试使用Send()向套接字的一侧写入时,我会得到一个SocketException,指示WSAECONNRESET。就好像浏览器的Shutdown()导致整个TCP连接被破坏,而不仅仅是入站分支。

有人有在C#中使用半封闭套接字的经验吗,特别是对同行半封闭的套接字进行编写的经验吗?

目前还没有示例代码,但如果没有人可以回复,我会提供一些。

在读取端收到关闭后,需要帮助写入套接字

您无法判断传入FIN是由关闭还是关闭引起的。在这种情况下,它显然是由关闭引起的。当您在入站套接字a上获得FIN时,正确的技术是关闭相应的出站套接字B进行写入,然后当您在上获得该套接字的FIN作为入站套接字(B)时,关闭相应的出站套接字a进行写入。关闭两个套接字后,请将它们都关闭。