Problem mit select()..



  • Hallo.

    Die Funktion select() läuft in einem eigenen Thread und im FD_SET sind 2 descriptoren (1 für Server-Socket, 1 für Client-Socket);

    Dabei ist folgendes Problem entstanden:

    Der ClientSocket wird benutzt wenn...
    1. von aussen eine connection aufgebaut wird.
    oder
    2. wenn das Programm selbst nach aussen eine connection aufbaut.

    Wenn von aussen eine Verbindung angefordert wird, so blockt select cniht mehr, ins FD_SET wird auch der Clientsocket eingefügt und beim nächsten select()-Aufruf kann alles perfekt laufen.
    Aber wenn select() schon läuft (und damit blockt), der user aber von dem Hauptthread des Programmes aus mit clientsocket eine neue verbindung eingeht, so kann die schon blockende select() funktion die ja immer noch dumm pennt, nicht den "lesbar"-Status des Clientsockets abfragen.

    Meine Überlegungen waren folgende:

    1.Falls es eine Möglichkeit gibt select() kurz aufwecken, FD_SET aktualisieren und select() erneut aufrufen.
    oder
    2. Für jeden der beiden Sockets nen Thread erstellen, in jedem Thread select() laufen lassen, sodass der Thread des clientsockets nur dann aktiviert wird, wenn der clientsocket von selbst eine Verbindung anch aussen aufbaut oder vom THread des Serversockets gestartet wird, wenn eine Verbindung von aussen eingeht.

    PS: Falls der Client gerade besetzt ist, so übernimmt die eingehende connection kurz ein buttlersocket und sendet "busy" und disconnected wieder, sodass der romete weiss er muss es später nochmal versuchen. Kann ich sofort nach dem erfolgreichen connect()-Aufruf mit send was senden oder muss ich erst mal ne gewisse Zeit Sleep()'en um dem Remote Zeit zu lassen?

    Habe ich vielleicht von Anfang an die falsche Denkschiene??
    Das ist meine erste Erfahrung mit Winsock in C und unter VB ging das anders ;~)...

    Mfg.



  • lol du otto.
    hier ist ein Anfänger-Forum, frag sowas auf UNIX-Foren, oder such nach Hilfe im IRC. Ich weis wie man das macht aber sag es dir nicht.. lol



  • KDSbest schrieb:

    lol du otto.
    hier ist ein Anfänger-Forum, frag sowas auf UNIX-Foren, oder such nach Hilfe im IRC. Ich weis wie man das macht aber sag es dir nicht.. lol

    Hallo Gurke.
    Vielleicht hast du Recht.

    CU du Lümmel. LOOL



  • Problem gelöst.


Anmelden zum Antworten