Hi
unter Linux kann ich einen Dateideskriptor für ein TCP-Socket ja mit
duplizieren, ich erhalte also einen neuen Dateideskriptor, der auf dem selben Socket operiert. Das Socket selbst wird erst geschlossen, wenn alle darauf zeigenden Dateideskriptoren geschlossen wurden.
Genau diese Funktionalität brauche ich für Windows (ich möchte einen plattformübergreifenden Server mit C++ programmieren). Da die Sockets bei Windows nicht auf Dateideskriptoren beruhen, brauche ich eine alternative Funktion, die mir den Socket dupliziert. Der Socket selbst soll dann natürlich (wie auch in Linux) erst geschlossen werden, wenn alle Kopien davon geschlossen wurden.
Wenn es keine entsprechende Funktion unter Windows gibt, werde ich wohl nicht darum herum kommen, eine Socket-Wrapperklasse mit einem Zähler für die Kopien des Sockets zu programmieren (die Klasse zerstört das Socket erst, wenn der Zähler wieder auf null ist). Aber diesen Aufwand würde ich mir gerne ersparen.
Gruß,
Sebastian Meßmer
edit:
Ich habe inzwischen eine Socket-Wrapperklasse dafür geschrieben. Es würde mich trotzdem interessieren, ob WinSock dafür irgendwelche Funktionen bietet oder ob das nur unter Linux geht.
Weiterhin würde mich interessieren, wie ich unter Windows nicht-blockierend überprüfen kann, ob an einem Socket Daten anliegen (bei recv sollen die Sockets trotzdem blockieren).
unter Linux kann ich einen Dateideskriptor für ein TCP-Socket ja mit
Code:
neuer_socket=fcntl(alter_socket,F_DUPFD,0);
Genau diese Funktionalität brauche ich für Windows (ich möchte einen plattformübergreifenden Server mit C++ programmieren). Da die Sockets bei Windows nicht auf Dateideskriptoren beruhen, brauche ich eine alternative Funktion, die mir den Socket dupliziert. Der Socket selbst soll dann natürlich (wie auch in Linux) erst geschlossen werden, wenn alle Kopien davon geschlossen wurden.
Wenn es keine entsprechende Funktion unter Windows gibt, werde ich wohl nicht darum herum kommen, eine Socket-Wrapperklasse mit einem Zähler für die Kopien des Sockets zu programmieren (die Klasse zerstört das Socket erst, wenn der Zähler wieder auf null ist). Aber diesen Aufwand würde ich mir gerne ersparen.
Gruß,
Sebastian Meßmer
edit:
Ich habe inzwischen eine Socket-Wrapperklasse dafür geschrieben. Es würde mich trotzdem interessieren, ob WinSock dafür irgendwelche Funktionen bietet oder ob das nur unter Linux geht.
Weiterhin würde mich interessieren, wie ich unter Windows nicht-blockierend überprüfen kann, ob an einem Socket Daten anliegen (bei recv sollen die Sockets trotzdem blockieren).