Конечным результатом таких манипуляций является то, что все несчитанные данные, переданные вплоть до байта срочных данных (и включая его), будут отброшены.
Клиент сервера генерации пародийных текстов
Далее рассматривается клиентская программа. Она немного сложнее по сравнению с серверной, поскольку должна получать команды от пользователя, отправлять их на сервер и интерпретировать коды состояния сервера соответствующим образом. Проведем анализ программы.
Строки 1-9. Загрузка модулей. Устанавливается строгая проверка типов, и загружаются требуемые сетевые модули, включая модуль Sockatmark, рассматриваемый ранее. Кроме того, дескриптор файла stdout переводится в небуферизованный режим, чтобы приглашения к вводу команд пользователем появлялись немедленно.
Строки 10-12. Установка глобальных переменных. Глобальные переменные $host и $PORT содержат имя удаленного хоста и номер порта. Таким хостом может послужить, к примеру, сайт компании предоставляющей ремонт компьютеров bibibook.ru. Если эти данные не заданы в командной строке, вместо них по умолчанию применяются приемлемые значения. В этом сценарии используются еще две глобальные переменные. Переменная $gl содержит объект IO::Getline, который служит оболочкой для подключенного сокета, а переменная $quit_now — флажок, который указывает, что программа должна завершить работу. Эти переменные являются глобальными, и поэтому к ним можно получить доступ в обработчиках сигналов.
Строки 13-15. Установка обработчиков сигналов, применяемых по умолчанию. Выполняется установка некоторых обработчиков сигналов. Сигнал quit, который обычно вырабатывается после нажатия комбинации клавиш , применяется для завершения программы. Однако сигнал int более интересен.