Sockets u.a. an Kindprozess verschenken

08/02/2015 - 12:30 von Stefan Reuther | Report spam
Hallo,

unter Unix ist es möglich, einen Socket zu öffnen, den File-Descriptor
z.B. in eine Umgebungsvariable zu packen, diese Umgebungsvariable in
einem Kindprozess auszulesen und den Socket dort zu verwenden. Ich
tüftele gerade, wie man das in Windows nachbauen könnte.

Für regulàre Kernelobjekte (Semaphoren usw.) sollte das gehen: entweder
das Handle vererblich machen und einfach über die Umgebung übergeben,
oder pid+Handle übergeben und das Handle per DuplicateHandle abholen.

Aber Sockets?

Prinzipiell sieht Windows für die Übergabe von Sockets an Kindprozesse
die Funktion WSADuplicateSocket vor, die benötigt aber die pid des
Kindprozesses, und die hab ich ja nicht, bevor ich den starte.

Unter http://support.microsoft.com/kb/150523/en-us schreibt Microsoft,
dass man Sockets wie Kernelobjekte per DuplicateHandle etc. behandeln
könne, raten aber gleichzeitig davon ab. Unter
http://stackoverflow.com/questions/...nheritable
wird dann auch ein Beispiel gegeben, wo es nicht funktioniert (layered
service provider aka Virenscanner).

Als einzige Lösung fàllt mir also ein, im Ausgangsprozess einen
irgendwie gearteten Transponder zu bauen, über den die Kindprozesse ein
WSADuplicateSocket mit der passenden pid auslösen können. Das ist
natürlich ein ziemlich schweres Geschütz.

Gibt es eine bessere Möglichkeit?


Stefan
 

Lesen sie die antworten

#1 Olaf Schmitt
08/02/2015 - 15:53 | Warnen spam
Am 08.02.2015 um 12:30 schrieb Stefan Reuther:
Hallo,

unter Unix ist es möglich, einen Socket zu öffnen, den File-Descriptor
z.B. in eine Umgebungsvariable zu packen, diese Umgebungsvariable in
einem Kindprozess auszulesen und den Socket dort zu verwenden. Ich
tüftele gerade, wie man das in Windows nachbauen könnte.



Ich bin mir nicht sicher, ob ich dich richtig verstanden habe.
Aber ich würde das jetzt über eine Singleton Klasse machen.
Und da würde ich auch gleich alle Socket-Routinen rein packen.


Olaf

Ähnliche fragen