002
11.12.2006, 21:30 Uhr
MuteX
|
Naja, die Erstellung einer eigenen Thread-Implementation würde meine Problematik nicht lösen.
Vielleicht nochmal zum besseren Verständnis: Ziel meines Proxys ist es, auf bestimmten lokalen Ports auf Verbindungen zu warten und sie dann, sofern eingetroffen, zu einem vorher festgelegten Host zu verbinden. Beispiel: Proxy wartet auf Port 1234 auf eingehende Verbindungen. Client verbindet sich dorthin, woraufhin das Proxy eine Verbindung zu google.de, Port 80 herstellt. Daten von google.de gehen durch zum Client und andersrum. Das gewährleistet halt, dass ich mit dem Proxy den gesamten Datenverkehr überwachen kann.
Nun zur Problematik: Ich habe momentan 2 Klassen teil-realisiert. Das wäre zum Einen 'CProxy' und 'CTunnel'. CTunnel ist für das Horchen auf eingehende Verbindungen zuständig und hält außerdem Informationen dafür parat, wohin es nach einer Verbindungsherstellung hingehen soll. Danach hat CTunnel nix mehr mit der Verbindung an der Mütze, es dient also lediglich der Einleitungsphase des Verbindungsaufbaus. Damit Verbindungen angenommen werden können, muss z.B. accept() aufgerufen werden. Das geht entweder über Polling (eklig) oder in der blockierenden Variante, wozu ein Thread notwendig ist, sofern man nicht das ganze Programm anhalten möchte. Und nun mein Problem: CProxy verwaltet u.A. alle Tunnel. Und jeder Tunnel stellt eine Funktion bereit, die das Horchen auf Verbindungen einleitet (simples accept()). Ist es nun sinnvoller/logischer, den Aufruf dieser Funktion von CProxy aus zu tätigen oder das dem Tunnel selbst zu überlassen? Der hauptsächliche Unterschied liegt ja darin, wer den Thread verwaltet. In erstem Falle würde das CProxy-Objekt einen Thread spawnen und darin die Tunnel-Funktion für das Annehmen von Verbindungen aufrufen. Das hat den Vorteil, dass wenn eine Verbindung eintrifft, das CProxy-Objekt weiterführende Operationen innerhalb seiner eigenen Klasse leicht ausführen kann, ohne eine Zeiger-Rumgezeige in Kauf nehmen zu müssen. Verwalten allerdings die CTunnel-Objekte den Thread, müssten sie über ein Callback dem CProxy-Objekt mitteilen, dass da was gekommen ist. Erst dann kann reagiert werden.
Ich häng halt im Moment daran fest, dass ich mir nicht sicher bin, wo was hingehört. Ich hoffe, dass das nun ein bisschen verständlicher ist. |