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.