2014-01-25 47 views
0

在民意调查方法的MSDN描述,SelectRead选项,解释时,如果任何条件都成立的返回值将是正确的:Socket.Poll方法在达到超时前返回false的可能原因是什么?

  • Listen方法被调用和连接悬而未决。

  • 数据可供阅读。

  • 连接已关闭,重置或终止。

因为投票是一个阻塞方法,这是有道理的,该方法将“等待”任何这些条件变成真的,如果达到超时,返回false。

但是在我的应用程序中,我在遇到超时之前遇到'false'返回值。

我想知道导致这种情况的原因是什么? 有没有准确的方法知道?

+1

你需要告诉我们你的应用程序代码,没有它是不可能有人能够诊断问题.... –

+0

我在我的代码中有以下行:'bool hasSomething = mySocket.Poll(pollTime,SelectMode。 SelectRead);'pollTime为15秒(微秒)。它立即返回(或者可能在〜1秒之后 - 绝对不是15)并且值为'false'。该代码来自HTTP客户端。在发送一个HTTP请求之后,客户机读取字节后的响应字节,并且每个字节执行我提到的那一行。然后它运行'Socket.Receive')。它通常运行良好,但有一个服务器和一个特定的URL,导致所提到的调用“民意调查”返回false(并不总是,但非常频繁)。 – Ayal

+0

也许您的套接字启用了KeepAlive,并且服务器无法访问,导致poll因为某些keepalive数据包被丢弃而返回? –

回答

-1

连接系统很难诊断。您可以尝试使用网络嗅探器来检查当时发生了什么。

您也可以尝试使用的方法就像这里: https://etwcontroler.codeplex.com/

在客户端和服务器创建ETW会话,并停止录制时坏的情况发生,所以你已经记录了什么你的客户端上发生,服务器和网络。

相关问题