Книга: UNIX: разработка сетевых приложений

9.10. Функция sctp_recvmsg

9.10. Функция sctp_recvmsg

Функция sctp_recvmsg, подобно sctp_sendmsg, предоставляет удобный интерфейс к расширенным возможностям SCTP. С ее помощью пользователь может получить не только адрес собеседника, но и поле msg_flags, которое обычно заполняется при вызове recvmsg (например, MSG_NOTIFICATION, MSG_EOR и так далее). Кроме того, функция дает возможность получить структуру sctp_sndrcvinfo, которая сопровождает сообщение, считанное в буфер. Обратите внимание, что если приложение хочет получать информацию, содержащуюся в структуре sctp_sndrcvinfo, оно должно быть подписано на событие sctp_data_io_event с параметром сокета SCTP_EVENTS (по умолчанию эта подписка включена).

ssize_t sctp_recvmsg(int sockfd, void *msg, size_t msgsz,
 struct sockaddr *from, socklen_t *fromlen,
 struct sctp_sndrcvinfo *sinfo, int *msg_flags);
Возвращает, количество считанных байтов в случае успешного завершения, -1 в случае ошибки

По возвращении из этого вызова аргумент msg оказывается заполненным не более, чем msgsz байтами данных. Адрес отправителя сообщения помещается в аргумент from, а размер адреса — в аргумент fromlen. Флаги сообщения будут помещены в аргумент msg_flags. Если уведомление sctp_data_io_event включено (а по умолчанию это так и есть), структура sctp_sndrcvinfo заполняется подробными сведениями о сообщении. Обратите внимание, что если функция sctp_recvmsg реализована через вызов recvmsg, то поле flags в последнем устанавливается равным нулю.

Оглавление книги


Генерация: 0.813. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз