Архив документации OpenNet.ru /
Раздел "Программирование, языки" /
Индекс
Дальше: 7 Операции с сетевой
Вверх: socket
Назад: 5 Передача данных через
При работе с 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
Архив документации на OpenNet.ru