select()用于超时

时间:2012-03-21 05:12:58

标签: c select network-programming sftp

我只能在select()API中将最多20秒设置为timeout参数。无论我在20以上给出什么价值,select()在20秒后返回...... 所以我试图像这样写一个1分钟超时的循环

    int timeoutcount = 0;
    do
    {
    FD_ZERO(&fd);
    FD_SET(sock,&fd);
    timeout.tv_sec = 20;
    timeout.tv_usec = 0;
    rc = select (sock+1,&fd,null,null,&timeout);
    if(rc ==0)
    timeoutcount += 20;
    }
    while(rc ==0 && timeoutcount <60)

请帮帮我...我的方式是否正确? 如果是这样,在第一次超时后选择返回1.请帮我解决这个问题 注意:我在目标C中使用它

1 个答案:

答案 0 :(得分:10)

选择超时的最大值不超过20秒 - 其他东西(很可能是在套接字上准备好读取的数据)必须导致select()提前返回。如果您真的只想使用select()作为一种睡眠方式,请尝试这样调用它:

struct timeval tv = {600, 0};   // sleep for ten minutes!
if (select(0, NULL, NULL, NULL, &tv) < 0) perror("select");