Socket.Poll 方法

定义

重载

Poll(TimeSpan, SelectMode)

确定 Socket 的状态。

Poll(Int32, SelectMode)

确定 Socket 的状态。

Poll(TimeSpan, SelectMode)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

确定 Socket 的状态。

public:
 bool Poll(TimeSpan timeout, System::Net::Sockets::SelectMode mode);
public bool Poll (TimeSpan timeout, System.Net.Sockets.SelectMode mode);
member this.Poll : TimeSpan * System.Net.Sockets.SelectMode -> bool
Public Function Poll (timeout As TimeSpan, mode As SelectMode) As Boolean

参数

timeout
TimeSpan

等待响应的时间。

mode
SelectMode

SelectMode 值之一。

返回

基于 mode 参数中传递的轮询模式值的 Socket 的状态。 true如果以下任何条件在 过期之前timeout发生,则返回 ;否则为 false

  • 对于 SelectRead,如果已调用且连接处于挂起状态、数据可供读取,或者连接已关闭、重置或终止,则返回 trueListen()
  • 对于 SelectWrite,如果处理 Connect 且连接成功,或者可以发送数据,则返回 true
  • 对于 SelectError,如果处理Connect未阻止且连接失败的 ,或者如果未OutOfBandInline设置 且带外数据可用,则返回 true
  • 否则,它将返回 false

例外

timeout 小于 -1 毫秒或大于 MaxValue 毫秒。

尝试访问套接字时出错。

适用于

Poll(Int32, SelectMode)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

确定 Socket 的状态。

public:
 bool Poll(int microSeconds, System::Net::Sockets::SelectMode mode);
public bool Poll (int microSeconds, System.Net.Sockets.SelectMode mode);
member this.Poll : int * System.Net.Sockets.SelectMode -> bool
Public Function Poll (microSeconds As Integer, mode As SelectMode) As Boolean

参数

microSeconds
Int32

等待响应的时间(以微秒为单位)。

mode
SelectMode

SelectMode 值之一。

返回

基于 mode 参数中传递的轮询模式值的 Socket 的状态。

  • 对于 SelectRead,如果已调用且连接处于挂起状态、数据可供读取,或者连接已关闭、重置或终止,则返回 trueListen()
  • 对于 SelectWrite,如果处理 Connect 且连接成功,或者可以发送数据,则返回 true
  • 对于 SelectError,如果处理Connect未阻止且连接失败的 ,或者如果未OutOfBandInline设置 且带外数据可用,则返回 true
  • 否则,它将返回 false

例外

mode 参数不是一个 SelectMode 值。

尝试访问套接字时出错。 请参见下面的备注。

示例

下面的代码示例创建一个套接字,连接到服务器,并使用 Poll 检查套接字的状态。

//Creates the Socket for sending data over TCP.
Socket^ s = gcnew Socket( AddressFamily::InterNetwork, SocketType::Stream,
   ProtocolType::Tcp );

// Connects to host using IPEndPoint.
s->Connect( EPhost );
if ( !s->Connected )
{
   strRetPage = "Unable to connect to host";
}
// Use the SelectWrite enumeration to obtain Socket status.
if ( s->Poll( -1, SelectMode::SelectWrite ) )
{
   Console::WriteLine( "This Socket is writable." );
}
else if ( s->Poll(  -1, SelectMode::SelectRead ) )
{
   Console::WriteLine( "This Socket is readable." );
}
else if ( s->Poll(  -1, SelectMode::SelectError ) )
{
   Console::WriteLine( "This Socket has an error." );
}
//Creates the Socket for sending data over TCP.
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
   ProtocolType.Tcp );

// Connects to host using IPEndPoint.
s.Connect(EPhost);
if (!s.Connected)
{
   strRetPage = "Unable to connect to host";
}
// Use the SelectWrite enumeration to obtain Socket status.
 if(s.Poll(-1, SelectMode.SelectWrite)){
      Console.WriteLine("This Socket is writable.");
 }
 else if (s.Poll(-1, SelectMode.SelectRead)){
       Console.WriteLine("This Socket is readable." );
 }
 else if (s.Poll(-1, SelectMode.SelectError)){
      Console.WriteLine("This Socket has an error.");
 }
'Creates the Socket for sending data over TCP.
Dim s As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

' Connects to host using IPEndPoint.
s.Connect(EPhost)
If Not s.Connected Then
   strRetPage = "Unable to connect to host"
End If
' Use the SelectWrite enumeration to obtain Socket status.
If s.Poll(- 1, SelectMode.SelectWrite) Then
   Console.WriteLine("This Socket is writable.")
Else
   If s.Poll(- 1, SelectMode.SelectRead) Then
      Console.WriteLine(("This Socket is readable. "))
   Else
      If s.Poll(- 1, SelectMode.SelectError) Then
         Console.WriteLine("This Socket has an error.")
      End If
   End If 
End If

注解

方法 Poll 检查 的状态 SocketSelectMode.SelectRead指定 参数selectMode以确定 是否Socket可读。 指定 SelectMode.SelectWrite 以确定 是否 Socket 可写。 使用 SelectMode.SelectError 检测错误条件。 Poll 将阻止执行,直到指定的时间段(以 microseconds、已用 或数据度量)可用。 microSeconds如果要无限期等待响应,请将 参数设置为负整数。 如果要检查多个套接字的状态,建议使用 Select 方法。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

注意

此方法无法检测某些类型的连接问题,例如网络电缆损坏,或者远程主机未正常关闭。 必须尝试发送或接收数据才能检测这些类型的错误。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

另请参阅

适用于