我正在尝试在 C# 中实现 HTTP 代理作为我正在处理的整体业务应用程序的一部分,并且遇到了以下难题。
HTTP 标准的一部分规定浏览器可以发出套接字关闭 (SocketShutdown.Send),此时服务器会将所有剩余的数据传递给浏览器并关闭它自己的一半套接字。当浏览器半关闭其连接时,我在套接字的接收端得到预期的行为,即 Select() 指示套接字是可读的,但使用 Receive() 从套接字读取返回零字节。但是当我尝试使用 Send() 写入我的套接字时,我得到一个 SocketException,指示 WSAECONNRESET。就好像浏览器的 Shutdown() 导致整个 TCP 连接被拆除,而不仅仅是入站支路。
有没有人有在 C# 中使用半封闭套接字的经验,特别是写入被同行半封闭的套接字?
目前没有示例代码,但如果没有人可以回复,我会提供一些。