Sockets werden doppelt vergeben



  • Hallo zusammen,

    ich habe ein ekliges Problem mit Sockets in einem C++-Programm (wobei die Socketverabeitung mit C funktioniert)

    Mein Programm schickt regelmäßig als Client ASCII Daten an einen Server. Die Verbindung wird über einer Klasse jeweils per socket und connect hergestellt.
    Über eine zweite Klasse wird (natürlich auf einem anderen Port) ein Listener-socket aufgemacht welches in einer Methode Ascii Kommandos empfängt und in einer zweiten Methode die Anwort auf den Socket sendet, der mit Accept angenommen wurde.

    Jedes für sich funktioniert auch ohne Probleme. Wenn ich allerdings (um die richtige Antwort zu schicken) nach dem Empfang der Daten als Server eine Anfrage als client starten möchte so gibt socket fröhlich die gleiche socket id zurück die zuvor vom accept ermittelt wurde. Weder socket noch connect geben dabei einen Fehler zurück, aber es wird dann die bestehende Verbindung verwendet

    Weiß jemand von Euch wo mein Denkfehler ist?

    Viele Grüße
    Holger



  • Keine Ahnung wo dein Denkfehler sein könnte aber du hast auch nicht beschrieben was das eigentliche Problem ist.

    Wenn der Socket nicht mehr verwendet wird dann kann die selbe Socket-ID wieder für den nächsten Socket verwendet werden.



  • Du brauchst nicht ein Socket zum Senden und ein anderes zum Empfangen. Sockets sind bidirektional, du kannst dasselbe zum Senden und zum Empfangen benutzen.



  • Hallo,

    ich sollte dann eigentlich 3 Sockets haben
    Der 1. ist der listener für einkommende Befehle von einem php-Script
    Der 2. wird bei einer neuen Anfrage durch accept erzeugt und dort sollen die Anfragen angenommen und beantwortet werden. Die Überwachung funktioniert mit einem select
    Der 3. geht an einen AVRnet-IO (auch biderektional)

    Allerdings bekommt der 3. durch Socket die Socketnummer vom 2. zugewiesen, so dass das PHP Script immer die Anfrage bekommt die eigentlich an den AVRnet-IO gehen sollte...

    Viele Grüße
    Holger


Anmelden zum Antworten