Строки 19-27. Отправка запроса и получение ответа. Вызывается функция send() для отправки на сервер сообщения, содержащего требуемое значение часового пояса или состоящего из одного пробела.
Теперь можно было бы вызвать функцию recv () для получения ответа от сервера, к примеру, с информацией как починить компьютер , но пока не известно, принимает ли сервер запросы. Поэтому, вместо непосредственного вызова функции recv () и перехода в состояние ожидания ответа на неопределенное время, вызов этой функции заключен в блок eval {} с использованием метода, показанного ранее. После входа в блок eval {} устанавливается обработчик сигнала alrm, который вызывает функцию die (). Затем определяется тайм-аут тревожного сигнала на timeout секунд с использованием функции alarm () и вызывается функция recv (). Если функция recv() возвращает управление до истечения тайм-аута, выводятся полученные данные. В ином случае вызывается функция die () с сообщением об ошибке.
Строка 28. Блок end {}. Как и в сервере, перед завершением работы уничтожается локальный сокет.
Чтобы проверить работу механизма тайм-аута клиента, запустите сервер и сразу же приостановите его работу с использованием клавиши приостановки (<Ctrl+Z> в системах UNIX). После отправки клиентом запроса на сервер, он не получит ответа и выдаст сообщение об ошибке, связанное с завершением работы по тайм-ауту.
Сокеты домена UNIX могут применяться для взаимодействия двух или более процессов на одном хосте. Вместо применения для обозначения “пунктов встречи” IP-адресов и номеров портов, в сокетах домена UNIX для этого используются полные имена файлов в локальной файловой системе. Это позволяет управлять доступом к серверу с использованием механизмов контроля доступа к файлу, но приводит к усложнению кода сервера, поскольку в нем должно быть предусмотрено уничтожение файла после закрытия сокета.
По сравнению с сокетами домена INET (сокетами TCP/IP), сокеты домена UNIX обеспечивают более высокую эффективность межпроцессной связи и надежную защиту от “нападений” из сети. Однако важным недостатком сокетов домена UNIX является то, что они не реализованы в таких широких масштабах, как сокеты TCP/IP.