我正在使用.NET 中的套接字对异步 IO 使用 BeginReceive() 和 EndReceive() 方法。客户端发送连续的数据包,调用 EndReceive() 返回读取的字节数。
问题是客户端正在发送数据包,但数据长度为零。它通过分析 WireShark 中的流量发现了这一点。当数据长度为零时,EndReceive() 调用将阻塞在那里。
有没有一种方法可以识别零长度数据而不实际阻塞 EndReceive()?
此外,ReceiveTimeout 属性似乎不适用于 Async 方法。
示例源代码:
// This method runs on a separate thread
private void ProcessRequest()
{
BeginReceive(OnClientReceive);
// Do some work here in a loop
}
// Callback method
private void OnClientReceive(IAsyncResult result)
{
int receivedCount = socket.EndReceive(result); // this one blocks
// Do some work here
// Again start listening for data
BeginReceive(OnClientReceive);
}