Socket.Poll()
public bool Poll (
)
MSDN:
Poll 方法将会检查 Socket 的状态。指定 selectMode 参数的 SelectMode.SelectRead,可确定 Socket是否为可读。指定 SelectMode.SelectWrite,可确定 Socket 是否为可写。使用SelectMode.SelectError 检测错误条件。Poll 将在指定的时段(以 microseconds 为单位)内阻止执行。如果希望无限期的等待响应,则将 microSeconds 设置为一个负整数。
int
MSDN:
等待响应的时间(以微秒为单位)。
自己理解:
是Poll程序中断运行时间。 如microseconds=1000;Poll阻塞1000毫秒,microseconds<0将无限等待响应。
2010.8.30
SelectMode mode
MSDN:
模式(SelectMode) | 返回(return) |
SelectRead | 1. 2.如果有数据可供读取,则为true。 3.如果连接已关闭、重置或终止,则返回true。 |
SelectWrite | 1. 2. |
SelectError | 1. 2. |
自己理解:
只对红色部分理解。
MSDN例子:
//Creates the Socket for sending data over TCP.
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
// Connects to host using IPEndPoint.
s.Connect(EPhost);
if (!s.Connected)
{
}
// Use the SelectWrite enumeration to obtain Socket status.
自己例子:
protected override void ProcMessage()
Socket.Select()
public static void Select (
)
MSDN:
Select 是一种静态方法,它可确定一个或多个 Socket 实例的状态。必须先将一个或多个套接字放入 IList中,然后才能使用 Select 方法。通过调用 Select(将 IList 作为 checkRead 参数),可检查是否具有可读性。若要检查套接字是否具有可写性,请使用 checkWrite 参数。若要检测错误条件,请使用 checkError。在调用 Select 之后,IList 中将仅填充那些满足条件的套接字。
如果当前处于侦听状态,则可读意味着可成功地对 Accept 进行调用而没有阻止。如果当前已接受连接,则可读意味着有可读取的数据。这些情况下,所有的接收操作均可成功进行而没有阻止。可读性也可指示远程 Socket是否已经关闭连接;如果连接已关闭,则对 Receive 的调用将立即返回,并返回零字节。
如果至少一个相关套接字(checkRead、checkWrite 和 checkError 列表中的套接字)符合其指定的条件,或者超过 microSeconds 参数,则无论先出现其中哪种情况,都会返回 Select。将 microSeconds 设置为 -1 会指定无限大的超时值。
如果对 Connect 进行非阻止调用,则可写意味着已经成功连接。如果已经建立连接,则可写性意味着所有的发送操作均会成功完成而没有阻止。
如果对 Connect 进行非阻止调用,则 checkerror 参数将标识尚未成功连接的套接字。
自己理解:
Select是一个静态方法。主要用于多个Socket套接字。
1.
2.
2010.8.31
MSDN例子:
IPHostEntry ipHostEntry = Dns.Resolve(Dns.GetHostName());
运行以后listenList全部剔除,按理应该保留符合SelectRead条件的。