On Sun, 2004-01-04 at 21:57, A.Loesch wrote:
1. Frage: Benoetige ich fuer jeden Thread eine eigene Socket-Verbindung,
Nein.
die ich nach dem Ende des Threads wieder schliessen muss?
Nein. Alle Sockets in einem gethread'eten Programm sind grundsätzlich global und damit für alle Threads verfügbar. Wie Du damit umgehst liegt allein bei Dir. Einen eigenen Thread pro Verbindung zu verwenden, ist eine gängige Möglichkeit (Multithreaded-Server). Genauso könntest Du einen einzelnen Thread verwenden, der "auf einem globalen select() sitzt" und alle "Requests" bearbeitet (Klassischer, Single-Thread-Server). Beides hat Vor- und Nachteile.
Du hast ja einen Serversocket, da bekommst Du die Anfrage und damit auch den Connection-Socket, den gibtst Du in den Thread rein. Jep, das ist das klassische Funktionsprinzip eines Multi-threaded Servers.
2. Frage: Wenn ich den Server oefter starte und beende, erhalte ich eine Bind-Exception beim Eerstellen eines Server-Sockets ("Address already used" oder so aehnlich). Was hat es damit auf sich? Bleiben die Sockets auch nach Ende des Programmes eine Zeit im Betriebssystem (SuSE 9.0) erhalten?
Solange der nicht geschlossen wird ja. Jein, streng genommen sogar ehe nein denn ja.
Stichwort "Lingering" (vgl. SO_LINGER in man 7 socket).
Natuerlich bin auch fuer andere Tips dankbar, bin erst ziemlich kurz dran mit dem Kram.
Mit welchem Framework arbeitest Du? Qt ist da sehr nett, die haben auch einen entsprechenden demo-httpd im doc/examples Verzeichnis. Qt mag den X+1-ten Socket- und/oder Thread-Wrapper mit sich bringen, doch das was hier gefragt ist, ist Standard Unix/Posix Programmierung.
Ralf