select und accept



  • Ich will bei Blockierenden Sockets bleiben.
    Nun meine Frage:
    Da ich ein Chatserver programmieren will, brauch ich ja die accept anfrage irgendwie ... ich hab gehört das man mit select auch accept anfragen bekommen kann. Aber ich hab noch nicht verstanden wofür der 1. Parameter bei select ist. Und irgendwie klappt das auch alles nicht! Habe 100 Sockets - (int) alle auf 0 gesetzt. Dann hab ich noch ein AcceptSocket (ebenfalls auf 0 gesetzt).

    Dann kommt schon die schleife:
    while()
    ->FD_ZERO
    ->FD_SET(...) /*100 + acceptsocket...
    .
    .
    .
    ->select(...)
    .
    if(ISSET(..)) /abfrage
    ...
    .
    .
    .

    Ja so in etwa sieht mein programm aus. Klappt aber alles irgendwie nicht. Entweder reagiert er überhaupt nicht oder ich bekomm immer nur -1 bei select als rückgabe...
    arbeite mit suse 9.0



  • der 1. Parameter ist der socket mit der höchsten nummer +1.

    die nächsten 3 enthalten dann eben fd_sets mit den Sockets, die du auf 1. Daten zu lesen 2. auf die Möglichkeit zum schreiben 3. auf Fehler prüfen willst.

    mit FD_ISSET prüfst du dann welches Socket gesetzt wurde in dem fd_set



  • ok.
    Soweit hab ich es verstanden.
    Aber klappen tut es trotzdem nicht.
    Entweder bekomm ich ein -1 als rückgabewert oder er reagiert auf nichts!

    Es ist übrigens vorher noch kein socket acceptiert worden! Ich hab ja vor das mit select ebenfalls zu handeln...

    Außerdem versteh ich eines nicht:
    Der Client kann ohne Probleme die Daten zum Server senden! Auch Connecten ...
    Nur der Server weiß es wohl nicht.



  • zeig mal die genaue Benutzung von select.

    Ansonsten lass dir bei einem Fehler, mal eine Fehlermeldung mit perror ausgeben (wertet gleich errno aus und sagt dir dann wo es harkt)


Anmelden zum Antworten