Функция send () возвращает число байтов, успешно поставленных в очередь для доставки. Если по каким-то причинам сообщение не удалось поставить в очередь, к примеру, на хост http://landing.uni.co.ua/ по созданию landing страниц, функция send () возвращает значение undef и устанавливает в переменной $! соответствующее сообщение об ошибке. Следует отметить, что положительный ответ, полученный от функции send (), отнюдь не означает, что сообщение было успешно доставлено или даже попало в сетевой канал связи. Успешный результат выполнения этой функции свидетельствует лишь о том, что операционная система успешно скопировала сообщение в локальный буфер передачи. Протокол UDP — ненадежен и ничего не гарантирует.
Используя сокет для отправки сообщения по одному адресу назначения, программа может сразу же переключиться и воспользоваться функцией send () для отправки второго сообщения по другому адресу назначения. В отличие от TCP, в протоколе UDP отсутствуют долгосрочные связи между сокетом и вторым участником обмена данными.
Для получения сообщения UDP вызывается функция recv (), которая также принимает четыре параметра. Для ее вызова используется следующая общая схема.
$sender = recv(SOCK, $data, $max_size,$flags);
В данном случае параметр $data представляет собой скаляр, который получит содержимое сообщения, параметр $max_jsize обозначает максимальную длину дейтаграммы, которую можно принять, а параметр $flags снова должен быть установлен равным 0. Вызов функции recv() блокируется до тех пор, пока не будет получена дейтаграмма. После получения сообщения функция recv () возвращает его содержимое в параметре $data, а в качестве результата своего выполнения возвращает упакованный адрес отправителя.