Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以访问引发IOException的套接字上的读取缓冲区?_C#_.net_Sockets_Tcp_Tcpclient - Fatal编程技术网

C# 是否可以访问引发IOException的套接字上的读取缓冲区?

C# 是否可以访问引发IOException的套接字上的读取缓冲区?,c#,.net,sockets,tcp,tcpclient,C#,.net,Sockets,Tcp,Tcpclient,我有一个应用程序,它使用异步BeginWrite方法通过TcpClient类发送大量数据。为了节省读取周期并尽可能快地发送有效负载,在所有发送完成之前,我不会从ReceiveBuffer读取任何内容。我已将ReceiveBuffer设置为足够大的大小,以便它可以捕获所有响应 问题是,有时在发送过程中会重置/关闭连接(System.IO.IOException:无法将数据写入传输连接:主机中的软件中止了已建立的连接)。我通过创建一个新的TcpClient、重新建立连接并继续发送来恢复。但是,我以前

我有一个应用程序,它使用异步BeginWrite方法通过TcpClient类发送大量数据。为了节省读取周期并尽可能快地发送有效负载,在所有发送完成之前,我不会从ReceiveBuffer读取任何内容。我已将ReceiveBuffer设置为足够大的大小,以便它可以捕获所有响应

问题是,有时在发送过程中会重置/关闭连接(System.IO.IOException:无法将数据写入传输连接:主机中的软件中止了已建立的连接)。我通过创建一个新的TcpClient、重新建立连接并继续发送来恢复。但是,我以前用来发送的套接字现在已关闭,我无法读取它迄今为止接收到的缓冲区。有没有办法恢复该套接字的ReceiveBuffer中的数据

更多信息:
我正在从TcpClient提供的底层网络流创建一个SslStream,并通过它发送数据。有时,来自服务器的响应在HTTP头中包含Connection:close。我猜SSL流会自动关闭,最终会关闭插座。由于我在发送周期中通常不读取响应,所以我不知道接收连接:close。发生这种情况后,下一次写入SslStream的尝试似乎会以静默方式失败,例如没有异常,但也没有收到来自服务器的响应。之后的下一次尝试写入SslStream将导致IOException


我尝试过检查套接字的状态,并以各种方式流,例如socket.Connected、socket.Poll(1000,SelectMode.SelectWrite)、SslStream.CanWrite。所有这些都始终为真,包括在尝试写入时抛出IOException之前。

在关闭套接字之前,您是否尝试在
IOException
处理程序中读取?读取最终应以相同的“连接已中止或重置”原因失败,但直到清空缓冲区后才会失败。尝试从套接字读取将导致“System.IO.IOException:无法从传输连接读取数据:已建立的连接已被主机中的软件中止”