Книга: 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
в последнем устанавливается равным нулю.
- 9.1. Введение
- 9.2. Модели интерфейса
- 9.3. Функция sctp_bindx
- 9.4. Функция sctp_connectx
- 9.5. Функция sctp_getpaddrs
- 9.6. Функция sctp_freepaddrs
- 9.7. Функция sctp_getladdrs
- 9.8. Функция sctp_freeladdrs
- 9.9. Функция sctp_sendmsg
- 9.10. Функция sctp_recvmsg
- 9.11. Функция sctp_opt_info
- 9.12. Функция sctp_peeloff
- 9.13. Функция shutdown
- 9.14. Уведомления
- 9.15. Резюме
- Упражнения