• [^] # Re: Select ?

    Posté par (site web personnel) . En réponse au message Mon buffer de socket se remplit il ?. Évalué à 2.

    Bon soit tu conçois ton programme comme un boucle avec un select au milieu qui attend sur le buffer.

    Dans ce cas là ton mail va devenir grosso modo ça :

    int main(int argc, char **argv)
    {
    fd_set rfds;
    struct timeval tv;
    int retval;
    while(1)
    {
    //Reset du descripteur de flux
    FD_ZERO(&rfds);
    // Surveiller stdin (fd 0) en attente d'entrées
    //XXX: change pour ton buffer ici
    FD_SET(0, &rfds);

    // Pendant 5 secondes maxi
    tv.tv_sec = 5;
    tv.tv_usec = 0;

    retval = select(1, &rfds, NULL, NULL, &tv);
    // Considérer tv comme indéfini maintenant !

    if (retval == -1)
    perror("select()");
    else if (retval)
    {
    printf("Données disponibles maintenant\n");
    /* FD_ISSET(0, &rfds) est vrai */
    if (strcmp(ta_string_lue, "exit"))
    break;
    }
    else
    printf("Pas de données depuis 5 secondes\n");
    }

    return EXIT_SUCCESS;
    }

    Soit tu embarque ce select dans une boucle pour traiter le boulot pendant que tu fais autre chose.
    Dans ce cas tu a besoin d'un descripteur supplémentaire qui te permettra du main() de réveiller le select en lui envoyant un "exit" ou autre sur ce flux