0

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

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

有没有人有在 C# 中使用半封闭套接字的经验,特别是写入被同行半封闭的套接字?

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

4

1 回答 1

0

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

于 2013-09-05T03:11:32.510 回答