The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
Дальше: 7 Операции с сетевой Вверх: socket Назад: 5 Передача данных через

6 Обмен данными при помощи протокола UDP

При работе с UDP сокетом для приема и передачи данных используются функции recvfrom и sendto.
ssize_t sendto(int socket, const void *message, 
               size_t length, int flags,
               const struct sockaddr *dest_addr, 
               socklen_t dest_len);
Функция sendto предназначена для отправки данных. Аргументы функции имеют следующее значение:
socket
сокет, через который будут отправлены данные.
message
указатель на буфер, содержащий данные для отправки.
length
определяет длину сообщения в байтах.
flags
определяет параметры передачи сообщения. Значение flags является результатом логического ИЛИ нуля или большего числа следующих констант:
MSG_OOB
передать срочные данные (не поддерживается протоколом UDP).
MSG_DONTROUTE
игнорировать параметры маршрутизации.
dest_addr
указатель на структуру, содержащую адрес получателя.
dest_len
определяет длину структуры, на которую указывает dest_addr

Функция возвращает число переданных байт в случае успешного завершения и -1 в противном случае. Следует заметить, что успешное выполнение функции sendto не гарантирует доставку данных получателю. Возврат значения -1 происходит только в случае локально обнаруженных ошибок.

ssize_t recvfrom(int socket, void *buffer, 
                 size_t length, int flags,
                 struct sockaddr *address, 
                 socklen_t *address_len);

Функция recvfrom принимает данные из сокета. Аргументы функции имеют следующее значение:

socket
сокет из которого производится чтение данных.
buffer
указатель на буфер, в который будут помещены данные.
length
определяет длину буфера, на который указывает аргумент buffer.
flags
определяет параметры приема данных. Значение flags является результатом логического ИЛИ нуля или большего числа следующих констант:
MSG_PEEK
оставить принятые данные в буфере приема. Следующий вызов recvfrom получит те же данные.
MSG_OOB
принимать только срочные данные (не поддерживается протоколом UDP).
MSG_WAITALL
блокировать функцию, пока не будет принят полный объем данных, определенный аргументом length. Функция может вернуть меньший объем данных в случае обрыва соединения, ошибки, связанной с сокетом, использования флага MSG_PEEK.
address
указатель на структуру, в которую будет помещен адрес отправителя.
address_len
определяет длину структуры, на которую указывает address.

Функция возвращет количество данных, записаных в буфер. Если при выполнении функции возникли ошибки, то возвращается значение -1. Для протокола UDP, данные, пришедшие в одном пакете, должны быть прочитаны одним вызовом функции recvfrom. Если длина буфера недостаточна для размещения всех данных, то лишние байты отбрасываются.



Zwon
2002-03-24



Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру