Praktische Aufgabe 2: Webserver

Es ist ein einfacher Webserver zu programmieren. Dieser soll in der Lage sein, angeforderte lokale Dateien auszuliefern. Ein gängiger Web-Browser sollte etwa eine einfache HTML-Datei mit eingebundenen Grafiken anfordern können und korrekt anzeigen. Maßgebend ist dabei die Version 1.0 des HTTP-Protokolls.

Bei der Erstellung des Programms sind folgende Punkte zu beachten:

  • Anfragen von Clients können in mehrere Pakete fragmentiert sein. Es muss demnach u. U. mehrfach vom Socket gelesen werden, bevor die Anfrage bearbeitet werden kann.
  • Der Server muss parallel mehrere Verbindungen zu verschiedenen Clients verwalten können, hierbei sollte theoretisch keine Obergrenze bestehen.  fork() (alternativ poll(), libpthread, etc.) wird verwendet, um mehrere offene Sockets zu überwachen.
  • Alle Header der Anfrage werden erkannt, auch wenn sie ignoriert werden können.
  • Der Webserver kann wieder mit der cnaiapi entwickelt werden.