我想使用该select
函数来处理不同的文件描述符。当程序启动时,它必须按照一个时间间隔开始向其他客户端发送数据包。我的第一个问题是如何在主 while 循环中使用计时器而不中断 while 循环和 select 函数的功能?那是因为我需要在计时器运行时接受用户输入。
第二个问题是,如果我需要将 send 函数放在我的 while 循环中,我现在不需要。当程序进入while循环时我需要编写发送函数还是需要在其他地方使用它?
此外,程序必须检测在特定时间未激活的文件描述符。如何检测哪些文件描述符没有向服务器发送任何数据包?
下面你可以看到我到目前为止写的代码。你能帮我修一下吗?我还没有在这里使用任何计时器。此外,该程序无法检测到哪个文件描述符已超时。
FD_ZERO(&masterfds);
FD_SET(udp_con, &masterfds);
maxfds = udp_con;
while(exit == false)
{ //Do I need to use the send function here?
FD_ZERO(&readfds);
readfds = masterfds;
selectFunc = select(maxfds+1, &readfds, NULL, NULL, &tv);
if(selectFunc < 0)
{
message("error in select");
exit = true;
}
else if(selectFunc == 0)
{ //How can I detect which file descriptor is timed out?
for(i = 0; i <= maxfds; i++)
{
if(FD_ISSET(i, &readfds))
{
//Doesn't work
cout<<"The file descriptor "<<i<<" has timed out"<<endl;
}
}
}
else
{ //The server has received something from a client
for(i = 0; i <= maxfds; i++)
{
}
}
}