Задача получения широковещательных пакетов еще проще. Любой дейтаграммный сервер, к примеру, содержащий хост про люстры http://www.haldi.ru/svet/lyustry/ , принимает широковещательные сообщения без каких-либо дополнений в программе.
Широковещательная рассылка имеет некоторые существенные ограничения. Она может применяться только в локальной сети, поскольку маршрутизаторы не перенаправляют широковещательные пакеты в другую подсеть. Широковещательная рассылка не избирательна. Хост-компьютер не может отказаться от приема широковещательных пакетов, так же как телевизионная антенна не может принимать одни программы и отказываться от других. Операционная система принимает и обрабатывает каждое полученное широковещательное сообщение, даже если оно затем не 6удет востребовано ни одним прикладным приложением. По этой причине не следует злоупотреблять широковещательной рассылкой.
Один из способов преодоления этих ограничений состоит в использовании многоадресной рассылки, которая рассматривается далее. Пример такой программы приведен ниже.
Строки 1-12. Инициализация модулей и констант. Вводится флажок в верхней строке файла, что приводит к включению режима проверки потенциально опасных данных интерпретатора Perl. Определяется константа eliza_home и другие константы.
Строки 13,14. Установка обработчиков term и hup. Устанавливаются подпрограммы do_jterm() и do_hup (), соответственно, в качестве обработчиков сигналов term и hup. Устанавливается также подпрограмма do_term() как обработчик сигнала int.
Строка 15. Выборка номера порта из командной строки. Эта строка немного изменена так, чтобы параметр с обозначением номера порта оставался в массиве @argv, а не выбирался из него с помощью оператора shift. Это сделано с той целью, чтобы процедура do_relaunh ()продолжала иметь доступ к параметрам командной строки.
Проведем анализ программы.
Строки 16-17. Загрузка модулей. Загружаются стандартные модули IO::*, а также модули Daemon и web. Последние два модуля должны быть установлены в текущем каталоге или в каком-то другом, указанном в пути @inc интерпретатора Perl.
Строка 18. Определение констант. Определено имя файла PID, применяемого модулем Daemon. После автоматического перевода в фоновый режим этот файл будет содержать идентификатор серверного процесса.