【问题标题】:SCTP receive message function returning zeroSCTP 接收消息函数返回零
【发布时间】:2014-03-02 22:37:11
【问题描述】:

我编写的客户端程序使用 SCTP 套接字进行通信。我正在使用 sctp_recvmsg 从套接字读取特定用户可用的数据。我注意到有时 sctp_recvmsg 返回 0 值而不是读取的字节数或 -1 表示错误。我检查了我的代码,并且从中读取数据的套接字没有关闭。有人能解释一下这种行为是如何被看到的吗?

提前致谢。

问候, 苏杰

【问题讨论】:

  • 您使用哪种操作系统? Linux,Solaris...你能提供代码吗?如果可能,使用 tcpdump/snoop 捕获网络包。

标签: sockets sctp


【解决方案1】:

根据this lksctp thread,当你处于1对1 SCP连接时,如果对方关闭连接,sctp_recvmsg()返回0(see here一对一和一对一的解释-many connections) - 也就是说,当您使用SOCK_STREAM 而不是SOCK_SEQPACKET 创建套接字时。

引用:

没有记录来自 sctp_sendmsg 和 sctp_recvmsg 的返回值,但是 我想 sctp_sendmsg 会返回 -1 并将 errno 设置为 ECONNRESET 和 sendmsg 一样。但是,sctp_recvnmsg 呢?清楚的 如果半连接关闭,recvmsg 应该返回 0,但是没有 SCTP 中的半连接。函数的具体表现如何?

sctp_recvmsg() 将仅在 1 对 1 套接字上终止时返回 0。 但是,上述通知适用于两种样式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    相关资源
    最近更新 更多