раздражающее поведение select () в c

while (xxx) {
    timeout.tv_sec=TIMEOUT;
    timeout.tv_usec=0;
    FD_ZERO(&set); 
    FD_SET(sd,&set);

    switch (select(FD_SETSIZE,&set,NULL,NULL,&timeout))
    xxxxx
}

работает нормально, однако

FD_ZERO(&set); 
FD_SET(sd,&set);

while (xxx) {
    timeout.tv_sec=TIMEOUT;
    timeout.tv_usec=0;

    switch (select(FD_SETSIZE,&set,NULL,NULL,&timeout))
    xxxxx
}

не делает. Он работает в первый раз, но в следующий раз, когда он проходит через цикл while, он получает тайм-аут, даже если sd-сокет получает данные. Мне кажется, это пустая трата ресурсов, чтобы каждый раз приходилось опустошать и заполнять набор.

У кого-нибудь есть хорошее объяснение, почему это, а еще лучше, возможно, предложение, как этого избежать?

Ответы на вопрос(3)

Ваш ответ на вопрос