Ralf Corsepius wrote:
On Sun, 2004-01-04 at 21:57, A.Loesch wrote:
- 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). Es sollte schon der Multi-Threaded-Server sein, zu Uebungszwecken.
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.
- 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. Aber den Socket explizit su schliessen schadet nicht, oder?
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
Gerade habe ich ein neues Problem entdeckt. Der Server laeuft lokal, wenn ich jetzt mit mehreren Browsern Seiten abrufe, wirft der Server die Sockets(?) durcheinander, will sagen: Browser1 ruft Seite1 ab, und direkt danach Browser2 Seite2. Leider bekommt Browser2 Teile von Seite1 und Browser1 Teiel von Seite2. Liegt das daran, dass die Sockets global sind (s.o.)? Danke fuer die schnellen Zuschriften Gruss Nils -- -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.2 (GNU/Linux) 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 =SJYX -----END PGP PUBLIC KEY BLOCK-----