select()



  • Hi leute, ich such nach einer möglichkeit select() in einer c++ Klasse zu verwenden. kennt ihr da tutorials dafür, ich selbst habe nur was in C gefunden.
    Hatte versucht das umzuschreiben aber ging net.



  • Hm, ja, ich suche auch nach einer schönen Möglichkeit. Mein momentanes Interface sieht so aus:

    const unsigned short sock_len = FD_SETSIZE;
    unsigned request_count; // Anzahl der Requests
    iosocket_stream sock, clients[sock_len]; // Listen-Sock, Client-Sockets
    multiplexer plex(sock); // Multiplex-Klasse
    plex.push_queue(clients); // Clients in die Warteschleife aufnehmen
    // Server-Hauptschleife
    for(;;) {
       // Aktive Anfragen selektieren
       request_count = plex.select_connections();
       if(plex.is_readable(sock)) { // Listen-Sock ist aktiv
          // Accept usw.
       }
    
       for(unsigned i = 0; i < sock_len; i++) { // Für alle Clients
          if(plex.is_readable(clients[i])) { // Prüfe ob Daten anliegen
             // recv usw., bei recv = 0 --> plex.pop_queue(client[i])
             if(request_count-- <= 0) // Weite Anfragen vorhanden?
                break; // Nein
          }
       }
    
    }
    


  • Schaut euch boost::asio an. Das nutzt je nach System auch besseres als select (zB epoll unter Linux)

    Aber das hat nichts mit Webzeugs zu tun!
    Netzwerk != Internet != Web



  • Was ist denn an epoll() besser als select? 😮

    Was asio betrifft... ich möchte lieber mal meine eigenen Wrapper kreieren. Nichts gegen boost, aber irgendwie sieht die asio-Abteilung nicht sehr intuitiv aus. Wieso haben sie es nicht mehr wie die StdIO designed? Dann könnte man sich langes Doku-Lesen etwas verkürzen.



  • Ad aCTa schrieb:

    Was ist denn an epoll() besser als select? 😮

    so grob gesagt alles :D: http://bulk.fefe.de/scalable-networking.pdf

    Ad aCTa schrieb:

    Wieso haben sie es nicht mehr wie die StdIO designed? Dann könnte man sich langes Doku-Lesen etwas verkürzen.

    Es gibt doch Streams. Aber Netzwerk ist eben komplizierter und benötigt mehr.


Log in to reply