Если броузер запрашивает URL, например, страницы с информацией про ip телефоны , который оканчивается именем каталога, но не имеет завершающего символа косой черты, то подпрограмма lookup_file () сообщает об этом, возвращая код типа файла “directory”. При этом сервер вызывает функцию redirect () , которая сообщает броузеру, что запрос должен быть выдан повторно с использованием URL, содержащего в конце символ косой черты.
Строки 20-24. Вывод заголовка. Если затребованный документ был открыт успешно, то подпрограмма handle_connection () создает простой заголовок HTTP, отправляя строку состояния с кодом результата 200, за которой следуют поля заголовка, указывающие длину и тип документа. Заголовок завершается парой символов crlf. Настоящий Веб-сервер может также предусматривать отправку другой информации, такой как имя серверного программного обеспечения, текущая дата и время, а также отметка времени последнего изменения затребованного файла.
Строки 25-32. Обработка условий завершения. Если запрос был выполнен по методу head, то выполнение завершается и происходит выход из процедуры. В ином случае содержимое дескриптора файла копируется в сокет с использованием неразрывного цикла while (). После копирования в сокет всего файла дескриптор файла закрывается и выполняется возврат.
Строки 33-48. Подпрограмма lookup_file(). Эта подпрограмма выполняет преобразование затребованного URL в путь к физическому файлу, собирает некоторую информацию о выбранном файле и, если возможно, открывает его. Она также следит за тем, чтобы в броузере не применялись злонамеренные способы работы с URL, такие как включение двойных точек в обозначение пути для перехода в ту часть файловой системы, на которую у клиента отсутствуют права доступа.