Select() MultiSocket



  • Hallo Leute,

    bräuchte mal eure Hilfe bei der Umsetzung meines kleinen Servers.
    Ich verstehe nicht so recht wie select() funktioniert.

    Als Grundlage habe ich einen Thread am laufen, der jeden Socket auslesen soll und und gegeben Falls schließen. Die Sockets werden in einem Vector gespeichert.

    vector<SOCKET> mySockets
    

    Dieser Vector wird mit neuen Clients aus einem anderen Thread aus vollgestopft.

    Wie baue ich nun die Funktion auf damit ich alle Sockets auslesen kann ?

    void readSockets ( ){
    
      fd_set fds;
      size_t max = mySockets.size(); // anzahl der verbundenen Sockets
      FD_ZERO ( &fds );  
    
      FD_SET ( max, &fds );
    
      while ( 1 ) {
    
        max = mySockets.size();
        FD_SET ( max, &fds );
        select ( max + 1, &fds, NULL, NULL, NULL ); 
    
        for ( int cur = 0; cur < max; cur++) {
           /// wie gehts nun weiter ?
        }
      }
    }
    

    Könnte mir da einer bitte weiter helfen. Ich verstehe nun nicht was es mit dem FD_ISSET auf sich hat.

    snux



  • Ein bisschen spät vielleicht; aber mir hat dieses http://www.zotteljedi.de/socket-tipps/ und http://www.c-worker.ch/tuts.php geholfen.



  • snux schrieb:

    Könnte mir da einer bitte weiter helfen. Ich verstehe nun nicht was es mit dem FD_ISSET auf sich hat.

    Nun, du legst ein fd_set an, stopfst deine fds (Sockets) rein, rufst select auf, und das lässt nur die Sockets drin, auf denen du die entsprechend angegebenen Operationen ausführen kannst. Mit FD_ISSET prüfst du dann, ob ein bestimmter Socket noch im Set ist.


Anmelden zum Antworten