当使用select timeout功能时,请在调用select之前,闯将timeout对象;一定不能创建一个timeout对象,select多次都应用。

struct timeval timout;
timeout.tv_sec = 5;
timeout.tv_usec =0;

while(1)
{
    select(fds, &rd_set, NULL, NULL, &timeout);
}
// 上述代码,第一次是5秒超时;进入下一次循环,就是0秒超时了


// 如果希望每次5秒超时,将代码调整为如下:
while(1)
{
    struct timeval timout;
    timeout.tv_sec = 5;
    timeout.tv_usec =0;
    select(fds, &rd_set, NULL, NULL, &timeout);
}

 

Logo

更多推荐