Universität Ulm - Abteilung Angewandte Informationsverarbeitung
7. Übungsblatt zur Vorlesung Systemnahe Software II
Abgabetermin: Montag, 21.06.2004
Netzwerke, Server, Sockets (10 Punkte)
In diesem Blatt soll ein kleiner Server geschrieben werden, mit dem sich
verschiedene Teilnehmer unterhalten können. Dazu soll der Server auf
einem bestimmten Port (Vorschlag: 7353) Verbindungen annehmen (maximal 100
Verbindungen gleichzeitig). Sobald auf einer Verbindung neue Daten zur
Verfügung stehen, soll der Server diese Daten lesen und an alle Teilnehmer
(auch an den, der sie gesendet hat) unverändert weitergeben. Auf diese
Art und Weise kann eine Unterhaltung stattfinden.
- So wie hier beschrieben ist es der Einfachheit halber den
Teilnehmern nicht möglich festzustellen, wer was gesagt hat.
Ein Teilnehmer sollte also selbständig immer seinen Namen mit angeben.
- Das Warten auf neue Verbindungen und das Warten auf Daten von
bestehenden Verbindungen muß gleichzeitig geschehen. D.h., daß sich
die angemeldeten Teilnehmer unterhalten können und es kann jederzeit
auch ein neuer Teilnehmer hinzukommen. Vorhandene Teilnehmer können
ebensogut wieder verschwinden.
- Der kurze Abschnitt über Sockets auf der Manualseite von
poll könnte in diesem Zusammenhang hilfreich sein!
- Socket-Verbindungen können unbrauchbar werden, ohne daß poll
dies über POLLHUP signalisiert. Eine tote Verbindung erkennt man daran,
daß ein Schreibversuch den Fehler EPIPE liefert. Dies führt gleichzeitig
zu einem SIGPIPE-Signal, das ohne besondere Maßnahmen zum Programmabbruch
führt, SIGPIPE sollte also ignoriert werden.
- Der Server kann mit Hilfe des Programms telnet getestet werden:
telnet rechnername portnummer stellt eine Verbindung zu dem auf
Port portnummer auf dem Rechner rechnername laufenden Server
her. Alles was dann eingetippt wird, wird an den Server geschickt, und
alles was der Server antwortet, wird auf dem Bildschirm ausgegeben.
Das Programm telnet kann beendet werden, indem man Ctrl-] und dann q
eingibt.
- Ihr könnt davon ausgehen, daß sämtliche Socket-Verbindungen
zu den Teilnehmern bereit zum Schreiben sind, ohne daß dies
blockiert. Beim Lesen kann davon selbstverständlich nicht ausgegangen
werden.
- Nachdem poll gemeldet hat, daß Lesen von einem Filedeskriptor
möglich ist, kann davon ausgegangen werden, daß der erste read-Aufruf
nicht blockiert, egal wieviele Zeichen dabei gelesen werden sollen.
Allerdings kann es natürlich vorkommen, daß read weniger
Zeichen liest, als angefordert wurden.
Viel Erfolg!
Christian Ehrhardt