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

< Previous Next >
RE: Sockets und Threads
  • From: Ralf Corsepius <corsepiu@xxxxxxxxxxxxxx>
  • Date: Mon, 05 Jan 2004 08:41:26 +0100
  • Message-id: <1073288486.3540.142.camel@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
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



< Previous Next >
Follow Ups
References