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