我有以下问题:我正在等待选择套接字。
ArrayList a = new ArrayList();
a.Add(Socket1);
print_time_before
Select(a, null, null, 8000000);
print_time_after
我可以看到打印之间的时间不是 8 秒,尽管没有其他应用程序写入该套接字。怎么了 ?
ia a 包含套接字,这意味着没有可读取的内容或存在?
它在手册中:
如果您处于侦听状态,可读性意味着对 Accept 的调用将成功而不会阻塞。如果您已经接受了连接,则可读性意味着数据可供读取。在这些情况下,所有接收操作都会成功而不会阻塞。可读性还可以指示远程 Socket 是否已关闭连接;在这种情况下,对 Receive 的调用将立即返回,返回零字节。
当至少一个感兴趣的套接字(checkRead、checkWrite 和 checkError 列表中的套接字)满足其指定条件或超过 microSeconds 参数时,Select 返回,以先到者为准。将 microSeconds 设置为 -1 指定无限超时。
那么,套接字的状态是什么?