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.