1

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

提前致谢。

问候, 苏杰

4

1 回答 1

0

根据此 lksctp 线程sctp_recvmsg()如果在您处于 1 对 1 SCP 连接时对方关闭连接,则返回 0(有关一对一和一对多连接的说明,请参见此处) - 即,当您使用SOCK_STREAM而不是创建套接字时SOCK_SEQPACKET

报价:

sctp_sendmsg 和 sctp_recvmsg 的返回值没有记录,但我认为 sctp_sendmsg 将返回 -1 并将 errno 设置为 ECONNRESET,方式与 sendmsg 相同。但是,sctp_recvnmsg 呢?如果半连接关闭,普通 recvmsg 应该返回 0,但 SCTP 中没有半连接。该函数的行为如何?

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

于 2015-08-08T20:00:00.010 回答