即使我不要求使用C#使用重叠IO?

时间:2018-11-07 12:41:44

标签: c# sockets network-programming

我有一个System.Net.Sockets.Socket,其结构如下:

ClientSocket = new Socket(AddressFamily.InterNetwork,
                          SocketType.Stream,
                          ProtocolType.Tcp);

后来,我以一种同步的方式读了它:

bytesReceived = ClientSocket.Receive(aBuffer, aOffset, aSize, SocketFlags.None);

这将非常适合成千上万的呼叫。然后,出于某种原因,由于某种原因,我将得到一个带有以下详细信息的SocketException:

SocketErrorCode-IOPending 错误代码-996 结果:-2147467259(0x80004005) 消息:重叠的I / O操作正在进行中

在尝试了解有关重叠I / O的更多信息时,我看到它主要是在异步网络操作中引用的。我相信我使用的是Receive的同步/阻塞版本,因此我不清楚为什么这个异常会引用Overlapped IO。

有什么建议吗?这种异常很少发生,因此每次收集新数据可能需要几天或几周的时间。我希望有一些我想念的东西可能会导致更正确的方法。

现在,我正在努力检测此意外错误,并在发生这种情况时重试Receive

要回答以下一些问题:

  1. 所有对Receive的调用都在相同线程上处理,但它与创建Socket的线程不同。在构造函数中创建套接字,然后生成一个长时间运行的Task来反复调用Receive
  2. 我没有发生这种故障时使用的尺寸。

0 个答案:

没有答案