Socketdeskriptor an anderen Prozess übergeben



  • Hallo !

    Ich glaube diese Frage richtet sich eher an Experten:

    Ich müßte von einem Prozess einen Socketdeskriptor an einen anderen Prozess übergeben. Dieser andere Prozess ist aber kein verwandter Prozess des ersten.

    Habe folgendes Beispiel dazu gefunden.

    Leider ist mir das etwas zu hoch, kann nicht alle Schritte nachvollziehen. Außerdem klappt das ganze nur mit Socketpairs. Diese wiederum sind nur nutzbar, wenn die Prozesse voneinander Abhängig sind (Mutter-Kind).

    Am besten wäre, wenn ich den Deskriptor über eine named pipe übergeben könnte. Habe auch probiert das Beispiel in der Richtung zu modifizieren, leider ist der übergebene Deskriptor ungültig.

    Mir scheint das ganze ziemlich harter Tobak zu sein, aber vielleicht kann ja hier jemand helfen.

    MfG

    Ben



  • darf man einen socket denn eigentlich so ohne weiteres uebernehmen? waere das nicht auch sicherheitsbedenklich? eine andere idee zur uebernahme waere, dass du die socketinformationen in einer datei zwischenspeicherst, und im anderen programm erst dann ausliest wenn sich die datei aendert (kann man ja recht leicht ueberpruefen)



  • Ich denke nicht das das geht. Andererseits, warum sollte man das machen. Da kann man ja gleich einen COnnect selbst aufbauen.
    Allerdings geht es eine Process mit Fork zum Hauptprocess zu machen und den Socket mitzunehmen da der Child alle Deskriptoren vom Vater erbt.



  • Hallo !

    Erstmal danke für die Antworten...

    Also, in der Tat sieht es jetzt so aus, daß ich den anderen Prozess über fork() als Kind starte. Der Socket (im Moment noch ein Filehandle, aber das sollte ja egal sein...) wird vor dem fork geöffnet. In dem Child-Prozess kann ich den Filedeskriptor noch nutzen, ich müßte aber in dem Programm, daß der execl Aufruf startet, diesen auch noch nutzen.

    Hatte erst gedacht mit dup2(fd, 0) den Deskriptor auf die Standardeingabe zu kopieren und in dem aufgerufenen Programm über dup2(0, fd) ihn wieder zurückzuholen. Das klappt aber leider nicht.

    Sind meine ersten Schritte in der Richtung, mir fehlt da leider noch etwas der Überblick...

    Gruß,

    Ben



  • Hi !

    Sollte das wirklich so einfach sein ?

    Habe einfach mal in dem Programm, welches im Childprozess gestartet wird, den gleichen int-Wert des Filedeskriptors wie vor dem fork() aufgerufen und siehe da ! Es steckt die gleiche Datei dahinter...

    Sollte das jetzt wirklich so einfach sein ? Ich meine, ist das sicher das in dem Programm dann der gleiche int-Wert auf den Deskriptor zeigt ? Oder ist das nur ein blöder Zufall ?

    Gruß,

    Ben



  • BenWisch schrieb:

    Sollte das jetzt wirklich so einfach sein ?

    Ja, File Descriptoren (u.a.) werden beim fork vererbt. Übrigens sind die Prozesse ja doch verwandt, wenn der eine aus dem anderen per fork hervorgeht.



  • Hallo Bashar !

    Danke für die Bestätigung...hab wohl bei der ganzen Sache etwas zu kompliziert gedacht...das mit dem Vererben wußte ich, daß ich aber einfach nur den int-Wert des Deskriptors übergeben zu brauche, darauf bin ich erst nicht gekommen.

    Am Anfang wurde mir gesagt, die Prozesse seien nicht miteinander verwandt. Plötzlich hieß es doch der andere Prozess wird per fork() aufgerufen. Daher die Verwirrung *g*.

    Vielen Dank nochmal.

    Ben


Anmelden zum Antworten