我有一个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
。
要回答以下一些问题:
Receive
的调用都在相同线程上处理,但它与创建Socket的线程不同。在构造函数中创建套接字,然后生成一个长时间运行的Task来反复调用Receive
。