在超时的套接字上选择()

时间:2009-11-09 08:33:16

标签: c sockets timeout

在阅读FD_SET内,我有几个套接字:

  1. 主要套接字侦听新连接
  2. 接受侦听传入数据的套接字。
  3. 我将超时设置为30秒并调用select()。我很快发现每种行为都不同:

    1. 当新客户端在侦听端口上连接时,它会立即从阻止端返回。
    2. 当已连接的客户端发送消息时,它会阻塞整个30秒。
    3. 有没有办法可以让它在第二种情况下立即返回?

3 个答案:

答案 0 :(得分:2)

我的猜测是你没有在正确的fd_set中包含所有套接字,或者你没有将最高编号的文件描述符加上1作为select调用的第一个参数(下面的nfds)。

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

答案 1 :(得分:1)

select(2)最常见的错误之一是在再次调用fd_set之前没有重新初始化select()

答案 2 :(得分:0)

我经常使用这样的select()而没有任何问题。

对于等待数据的已接受套接字,可能会出错。你能发贴代码片段吗?尤其重要的是如何设置第一个select()参数。