Mailinglist Archive: opensuse-programming-de (174 mails)

< Previous Next >
Re: Sockets und Threads
  • From: Nils Meinert <Nils.Meinert@xxxxxx>
  • Date: Mon, 05 Jan 2004 12:26:45 +0100
  • Message-id: <3FF949F5.3050707@xxxxxx>
Ralf Corsepius wrote:
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).
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.


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.
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-----

< Previous Next >