irritating select () Verhalten in 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
}

funktioniert gut, aber

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
}

nicht. Es funktioniert das erste Mal, aber wenn es das nächste Mal die while-Schleife durchläuft, tritt eine Zeitüberschreitung auf, selbst wenn der SD-Socket Daten empfängt. Es scheint mir eine Verschwendung von Ressourcen zu sein, jedes Mal ein Set leeren und füllen zu müssen.

Jemand hat eine gute Erklärung, warum das so ist, und vielleicht sogar einen Vorschlag, wie man es vermeidet?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage