当前位置: 技术问答>linux和unix
select 问题!
来源: 互联网 发布时间:2016-03-03
本文导语: FD_ZERO(&fdRead); FD_SET(listen_fd, &fdRead); seltime.tv_sec = 60; seltime.tv_usec = 0; retval = select(listen_fd+1, &fdRead, NULL, NULL, &seltime); if( retval == 0 ) { //time out continue; } else if( retval = 0, select()就不会返回这个...
FD_ZERO(&fdRead);
FD_SET(listen_fd, &fdRead);
seltime.tv_sec = 60;
seltime.tv_usec = 0;
retval = select(listen_fd+1, &fdRead, NULL, NULL, &seltime);
if( retval == 0 )
{
//time out
continue;
}
else if( retval = 0, select()就不会返回这个错误?
(3)执行close(socket_fd)后socket_fd就小于0?
FD_SET(listen_fd, &fdRead);
seltime.tv_sec = 60;
seltime.tv_usec = 0;
retval = select(listen_fd+1, &fdRead, NULL, NULL, &seltime);
if( retval == 0 )
{
//time out
continue;
}
else if( retval = 0, select()就不会返回这个错误?
(3)执行close(socket_fd)后socket_fd就小于0?
|
楼主可以先试试不要select而直接accept, 看看是否能成功接受客户端连接, 之后再改回用select的方式.
|
楼主你应该这个条件中加上更多的判断,检查errno的值
因为当有信号产生的时候,select也会返回,所以你查看一下select的man手册,哪些errno值是正常的,加入这些条件判断中。当这些错误发生时,循环select。
因为当有信号产生的时候,select也会返回,所以你查看一下select的man手册,哪些errno值是正常的,加入这些条件判断中。当这些错误发生时,循环select。
|
和我遇到的这个问题很像
http://bbs.chinaunix.net/viewthread.php?tid=1010281&highlight=yecheng_110
http://bbs.chinaunix.net/viewthread.php?tid=1010281&highlight=yecheng_110