Дальше: 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