C# 是否可以访问引发IOException的套接字上的读取缓冲区?
我有一个应用程序,它使用异步BeginWrite方法通过TcpClient类发送大量数据。为了节省读取周期并尽可能快地发送有效负载,在所有发送完成之前,我不会从ReceiveBuffer读取任何内容。我已将ReceiveBuffer设置为足够大的大小,以便它可以捕获所有响应 问题是,有时在发送过程中会重置/关闭连接(System.IO.IOException:无法将数据写入传输连接:主机中的软件中止了已建立的连接)。我通过创建一个新的TcpClient、重新建立连接并继续发送来恢复。但是,我以前用来发送的套接字现在已关闭,我无法读取它迄今为止接收到的缓冲区。有没有办法恢复该套接字的ReceiveBuffer中的数据 更多信息:C# 是否可以访问引发IOException的套接字上的读取缓冲区?,c#,.net,sockets,tcp,tcpclient,C#,.net,Sockets,Tcp,Tcpclient,我有一个应用程序,它使用异步BeginWrite方法通过TcpClient类发送大量数据。为了节省读取周期并尽可能快地发送有效负载,在所有发送完成之前,我不会从ReceiveBuffer读取任何内容。我已将ReceiveBuffer设置为足够大的大小,以便它可以捕获所有响应 问题是,有时在发送过程中会重置/关闭连接(System.IO.IOException:无法将数据写入传输连接:主机中的软件中止了已建立的连接)。我通过创建一个新的TcpClient、重新建立连接并继续发送来恢复。但是,我以前
我正在从TcpClient提供的底层网络流创建一个SslStream,并通过它发送数据。有时,来自服务器的响应在HTTP头中包含Connection:close。我猜SSL流会自动关闭,最终会关闭插座。由于我在发送周期中通常不读取响应,所以我不知道接收连接:close。发生这种情况后,下一次写入SslStream的尝试似乎会以静默方式失败,例如没有异常,但也没有收到来自服务器的响应。之后的下一次尝试写入SslStream将导致IOException
我尝试过检查套接字的状态,并以各种方式流,例如socket.Connected、socket.Poll(1000,SelectMode.SelectWrite)、SslStream.CanWrite。所有这些都始终为真,包括在尝试写入时抛出IOException之前。在关闭套接字之前,您是否尝试在
IOException
处理程序中读取?读取最终应以相同的“连接已中止或重置”原因失败,但直到清空缓冲区后才会失败。尝试从套接字读取将导致“System.IO.IOException:无法从传输连接读取数据:已建立的连接已被主机中的软件中止”