2009-11-09 75 views
1

里面的阅读FD_SET我有几个插座:选择()上的插座与超时

  1. 主插口监听新的连接
  2. 接受的套接字监听传入的数据。

我将超时设置为30秒,并调用select()。我很快注意到每个行为都有所不同:

  1. 当新客户端连接到侦听端口时,它立即从阻塞返回。
  2. 当已连接的客户端发送消息时,它会阻止在整个30秒。

有没有一种方法,我可以把它立即返回在第二种情况下?

+0

一般来说,我会期待的一个代码错误。你可以粘贴你的FD_SET和你的选择电话吗? – Will 2009-11-09 08:44:20

+0

我认为你对1)的回应可能会导致2)。你对1)有何回应?发布你的代码会有帮助。 – 2009-11-09 13:34:32

回答

0

我不断用这样的选择()■没有任何问题。

也许你做错事与接受的套接字等待数据。你可以请张贴代码片段吗?尤其最重要的是你如何设置第一个select()参数。

2

我的猜测是,你要么不包括在正确的fd_set所有的插座或你是不是在最高编号的文件描述符加1传递作为第一个参数(以下NFDs的制剂)来选择呼叫。

select(nfds, &readfds, &writefds, &execptfds, &timeout); 
1

一个与select(2)最常见的错误是不是再次调用select()前重新初始化fd_set秒。