Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Dämonprogramm inetd

&pagelevel(3)&pagelevel

inetd ist einer der Internet-Dämonen in UNIX-Systemen. Da inetd eine zentrale Rolle beim Starten der Internet-Dienste spielt, wird inetd auch „Internet-Super-Server“ genannt.

Wie auch in UNIX-Systemen wird inetd mit Hilfe der Datei /etc/inet/inetd.conf konfiguriert. inetd wird beim Hochfahren des Systems gestartet. Dabei stellt inetd anhand der Datei inetd.conf fest, welche Dienste bei Bedarf über inetd gestartet werden sollen. inetd erzeugt dann für jeden in der Datei inetd.conf spezifizierten Dienst einen Socket und weist jedem dieser Sockets eine Portnummer zu.

Mit select()-Aufrufen für die einzelnen Sockets stellt inetd sicher, dass die Sockets bereit zum Lesen sind. Anschließend hört inetd die einzelnen Sockets mit der Funktion listen() auf Verbindungsanforderungen der Clients ab.

Mit jedem Socket, an dem eine Verbindungsanforderung ansteht, verfährt inetd wie folgt:

  • inetd nimmt die Verbindungsanforderung mit accept() an.
  • inetd erzeugt für den Socket mit fork() und dup() zwei Dateideskriptoren 0 (stdin) und 1 (stdout).

  • inetd startet für den Socket mit exec() die entsprechenden Dienste.

Der Einsatz von inetd hat also den Vorteil, dass nicht bereits beim Hochfahren des Systems alle Server-Prozesse gestartet werden müssen: Ein Server muss erst dann gestartet werden, wenn für ihn Anforderungen eines Clients vorliegen.

Außerdem erleichtert inetd die Aufgaben eines Servers, da inetd sich beim Verbindungsaufbau um den Großteil des Kommunikationsablaufs kümmert. Der Server kann voraussetzen, dass der ihm zugeordnete Kommunikationsendpunkt die Dateideskriptoren 0, 1 und 2 besitzt und bereits mit dem Client verbunden ist. Somit kann der Server sofort Funktionen wie read(), write(), send() oder rcv() ausführen, d.h. der Programmcode des Servers kann sehr einfach gehalten werden.

Ein Anwendungsprogrammierer, der über inetd gestartete Server entwickelt, kann die Adresse des Kommunikationspartners, d.h. die Adresse des Client-Sockets, mit der Funktion getpeername() ermitteln.