请教关于socket中select的使用
我有一个sever端,1500个客户端,当客户端连接服务器端的时候,服务器端接受连接,并且sever端创建一个新线程,将连接的file descriptors当作参数传入线程,线程内部与客户端进行数据收发。
我希望在每个线程里接受数据的时候设置time out值,当调用read的时候超过time out时间就放弃这次read。
如果使用select的话,这个函数能只监听每个线程内部他自己的那个file descriptors么?
高手们请指教,谢谢:)
[解决办法]
Select 是一种静态方法,它可确定一个或多个 Socket 实例的状态。必须先将一个或多个套接字放入 IList 中,然后才能使用 Select 方法。通过调用 Select(将 IList 作为 checkread 参数),可检查是否具有可读性。若要检查套接字是否具有可写性,请使用 checkwrite 参数。若要检测错误条件,请使用 Checkerror。在调用 Select 之后,IList 中将仅填充那些满足条件的套接字。
如果当前处于侦听状态,则可读意味着可成功地对 Accept 进行调用而没有阻塞。如果当前已接受连接,则可读意味着有可读取的数据。这些情况下,所有的接收操作均可成功进行而没有阻塞。可读性也可指示远程 Socket 是否已经关闭连接;如果连接已关闭,则对 Receive 的调用将立即返回,并返回零字节。
如果对 Connect 进行非阻塞调用,则可写意味着已经成功连接。如果已经建立连接,则可写意味着所有的发送操作均会成功完成而没有阻塞。
[解决办法]
http://blog.sina.com.cn/u/4b383bff010006xg