L'utilisation de select() pour le délai d'expiration

J'ai seulement été en mesure de définir un maximum de 20 secondes que le paramètre de délai d'attente dans le select () de l'API. Quelle que soit la valeur que j'ai donné au-dessus de 20, select() est de retour après 20 secondes...
Donc j'essayais d'écrire une boucle pour le délai d'attente de 1 minute comme ce

    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)

merci de m'aider...je vais dans le bon sens?
Si oui,sélectionnez retourne 1 après le premier délai d'attente..m'aider à comprendre ce trop
Note: je l'utilise en objective-C

Comment savoir si vous êtes timing, et de ne pas arriver les événements sur sock ?
Quand j'ai essayé pour la première fois, j'ai mis le timeout de 60 secondes. J'ai eu les événements sur la "chaussette" après 20 secondes lui-même, bien que mon câble réseau est débranché. Après cela, lorsque j'ai donné le délai d'attente de 20 secondes, il a été fonctionne correctement..
eh bien, vous avez besoin pour gérer la prise de l'événement. peu importe si votre câble est débranché ou pas. Vous pourriez obtenir un événement parce que le fait qu'il est débranché, ou quelque chose de synchronisation au niveau de la socket, en fonction de ce que vous faites. sélectionnez retourne quand: SOIT un socket a un événement, OU le délai d'attente se produit. sélectionnez() fonctionne exactement comme annoncé. Si vous ne manipulez pas la prise de l'événement, vous venez juste d'obtenir le même événement, la prochaine fois que vous appelez sélectionnez sur ce socket.
Je l'accepte. Mais puis-je savoir pourquoi select() retourne un événement à 22 secondes si mon délai d'attente est de 60 secondes (P. S Mon câble réseau est débranché lorsque je testais ce cas).
en raison d'un événement sur le socket qui s'est passé à cette époque. Vous avez besoin pour gérer cet événement, qui est: read() de la prise pour savoir POURQUOI il y avait un événement. Les événements sur le socket et le paramètre de délai d'attente pour sélectionner n'a aucun rapport, sauf que le délai se déclenche si aucun des sockets avez un événement à l'intérieur de ce temps.

OriginalL'auteur Kesav | 2012-03-21