Строки 11-32. Подпрограмма handle_connection (). Основной объем работы выполняется в подпрограмме handle_connection (), которая принимает в качестве параметра подключенный сокет и обслуживает всю транзакцию HTTP. В первой части подпрограммы осуществляется чтение запроса путем установки переменной с обозначением символов конца строки ($/), равной “$crlf$crlf”, и вызова оператора <>.
Строки 16-19. Обработка запроса. Следующий раздел подпрограммы обеспечивает обработку запроса. В нем вначале предпринимается попытка интерпретировать самую первую строку и извлечь затребованный URL, например, страницы, представляющей рекламу в интернете . Если метод запроса отличается от get или head или протокол, используемый броузером, отличается от НТТР/1.0 или НТТР/1.1, то функция отправляет в броузер сообщение об ошибке путем вызова подпрограммы invalid_request () и выполняет возврат. В ином случае она вызывает подпрограмму lookup_file () ile (), которая предпринимает попытку открыть затребованный файл для чтения.
При успешном выполнении подпрограмма lookup_file () возвращает трехэлементный список, содержащий открытый дескриптор файла, код типа файла и его длину. В ином случае она возвращает пустой список и вызывает подпрограмму not_found() для отправки в броузер соответствующего сообщения об ошибке.
Еще одно исключительное условие, с которым приходится иметь дело в этой подпрограмме, состоит в том, что броузер запрашивает URL, оканчивающийся именем каталога, а не именем файла. Такие URL должны оканчиваться косой чертой, поскольку в ином случае относительные ссылки в документах HTML, такие как . ./service_info.html, не будут действовать должным образом.