Tak tohle byl můj první velký programátorský projekt - plán byl vytvořit malý webserver, který bude sloužit jako základ pro další projekty. Rozšířená funkcionalita měla být realizována pomocí přilinkovaných modulů. Nakonec se použití omezilo na maturitní práci, která byla jednou z motivací tohohle řešení.
Kód zde nechávám k dispozici jako ukázku toho jak webový server nepsat. V první řadě je pěkně blbý nápad využívat na síťovou komunikaci služeb fread a fwrite (unixové systémy mají krásné volání open, read a write, které nemají takovou režiji). Další věc, kterou je opravdu lepší nepoužívat je provoz ve více vláknech - syscally typu select a poll jsou v tomhle případě nádherně použitelné a mnohem efektivnější (tohle si mnohdy lidé neuvědomují ani u komerčních projektů, kde by se mohla ušetřit hromada problémů).
A nakonec samotný kód, doufám, že se budete bavit při jeho čtení (je to celkem sranda). Ve verzi 2 už to dokonce tolik nepadá. Verze 1 pak segfaultovala celkem běžně :)
Kód zde nechávám k dispozici jako ukázku toho jak webový server nepsat. V první řadě je pěkně blbý nápad využívat na síťovou komunikaci služeb fread a fwrite (unixové systémy mají krásné volání open, read a write, které nemají takovou režiji). Další věc, kterou je opravdu lepší nepoužívat je provoz ve více vláknech - syscally typu select a poll jsou v tomhle případě nádherně použitelné a mnohem efektivnější (tohle si mnohdy lidé neuvědomují ani u komerčních projektů, kde by se mohla ušetřit hromada problémů).
A nakonec samotný kód, doufám, že se budete bavit při jeho čtení (je to celkem sranda). Ve verzi 2 už to dokonce tolik nepadá. Verze 1 pak segfaultovala celkem běžně :)
No ono u toho stdio nejde ani tak moc o ten overhead, jako spis o to,ze se to vlastne neda pouzit pro cteni a zapis zaroven nad cimkoli co neni seekovatelne. (a vytvorit k jednomu FD dva stdio streamy taky rozumne nejde, protoze fclose(3) ten FD zavre)
OdpovědětVymazat