Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在具有超时的套接字上选择()_C_Sockets_Timeout - Fatal编程技术网

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

C 在具有超时的套接字上选择(),c,sockets,timeout,C,Sockets,Timeout,在readFD\u集合中,我有几个插座: 主套接字正在侦听新连接 已接受套接字侦听传入数据 我将超时设置为30秒,并调用select()。我很快注意到每个人的行为都不一样: 当新客户端连接到侦听端口时,它会立即从阻塞返回 当已经连接的客户端发送消息时,它会阻塞整个30秒 有没有办法让它在第二种情况下立即返回?我经常使用这样的select()而没有任何问题 可能您在接受套接字等待数据时出错了。你能把代码片段贴出来吗?最重要的是如何设置first select()参数。我的猜测是,要么您没有将所有套

在read
FD\u集合中,我有几个插座:

  • 主套接字正在侦听新连接
  • 已接受套接字侦听传入数据
  • 我将超时设置为30秒,并调用
    select()
    。我很快注意到每个人的行为都不一样:

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

  • 有没有办法让它在第二种情况下立即返回?

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


    可能您在接受套接字等待数据时出错了。你能把代码片段贴出来吗?最重要的是如何设置first select()参数。

    我的猜测是,要么您没有将所有套接字包含在正确的fd_集中,要么您没有将编号最高的文件描述符加1作为第一个参数(下面的NFD)传递给select调用

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

    select(2)
    最常见的错误之一是在再次调用
    select()
    之前没有重新初始化
    fd\u set
    s。

    通常,我会预料到一个代码错误。你能粘贴你的FD_集合和你的select呼叫吗?我想你对1)的回应可能会导致2)。你对1)有何反应?发布你的代码会有帮助。