我正在尝试在C#中实现HTTP代理,作为我正在开发的整体业务应用程序的一部分,并且遇到了以下难题。
HTTP标准的一部分指定浏览器可以发出套接字关闭(SocketShutdown.Send),此时服务器将向浏览器提供任何剩余数据并关闭其自己的一半套接字。当浏览器半连接时,我在套接字的接收端获得预期的行为,即Select()表示套接字是可读的,但使用Receive()从套接字读取返回零字节。但是当我尝试使用Send()写入套接字时,我得到一个SocketException,指示WSAECONNRESET。就好像浏览器的Shutdown()导致整个TCP连接被拆除而不仅仅是入站支路。
有没有人在C#中使用半封闭套接字的经验,特别是写入同伴半封闭的套接字?
目前没有示例代码,但如果没有人可以回复,我会提供一些代码。
答案 0 :(得分:0)
您无法判断传入的FIN是由关闭还是关闭引起的。在这种情况下,它显然是由关闭引起的。在入站套接字A上获取FIN时的正确技术是关闭相应的出站套接字B以进行写入,然后当您在 套接字上获得FIN作为入站套接字(B)时,关闭相应的用于写入的出站套接字A.关闭两个套接字后,关闭它们。