Как упоминалось в функция получения сообщения SCTP, возвращающая ноль, sctp_recvmsg()
возвращает длину из 0
для индивидуального соединения SCTP ( socket(PF_INET, SOCK_STREAM, IPPROTO_SCT)
), когда другая сторона закрывает соединение.
Что происходит/должно происходить для реализации, соответствующей стандартам, когда я отправляю пустую строку (""
) с sctp_sendmsg()
через такое соединение?
- (Как) Получающая сторона различает, закрыл ли я соединение или просто отправил пустую строку/
- Или запрещено отправлять пустую строку?
Я пока не встречал ничего, объясняющего это.
EDIT: я должен упомянуть, что для стандартных recv()
из SOCK_STREAM
(например, для TCP) получение буфера нулевой длины происходит когда одноранговый узел выполнил упорядоченное завершение работы, поэтому очевидно вы повторно не разрешено send()
пустую строку в TCP. Для потокового протокола, такого как TCP, это имеет смысл, поскольку данные нулевой длины не могут иметь смысла в потоке. Но это вполне может иметь значение для дейтаграммы, как в случае с sctp_recvmsg()
, поэтому мы не можем сказать "это точно так же, как для TCP".