首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查SCTP客户端是否与SCTP端点断开连接

检查SCTP客户端是否与SCTP端点断开连接
EN

Unix & Linux用户
提问于 2019-01-19 09:03:01
回答 1查看 754关注 0票数 1

我希望正确地检查SCTP客户机是否断开连接,并希望为SCTP端点启用SCTP_STATUS (即SOCK_SEQPACKET),但我似乎无法设置它。在这里解释过,https://linux.die.net/man/7/sctp

这意味着我的函数调用如下所示:

代码语言:javascript
复制
setsockopt(sock, SOL_SCTP, SCTP_STATUS, &1, sizeof(int))

当调用它时,我得到“未找到协议”(代码: 92),尽管我的系统支持它,因为我可以完美地发送和接收SCTP数据包。

是什么导致了这种行为?还有其他选项可以检查客户端的连接状态吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-01-19 12:58:39

您尝试使用的选项不是用来激活特性的布尔值(就像SO_REUSEADDR那样)。它是一个只读的、功能齐全的struct sctp_status,如RFC6458中所定义的:

8.2。只读选项本节中定义的选项为只读选项。在setsockopt()调用中使用此选项将导致指示EOPNOTSUPP的错误。8.2.1.关联状态(SCTP_STATUS)应用程序可以检索有关关联的当前状态信息,包括关联状态、对等接收窗口大小、未确认数据块数和待接收数据块数。这个信息是只读的。以下结构用于访问此信息: struct sctp_status {

...

因此,要解决您的问题:完全删除这个setsockopt()调用。

您应该适当地使用getsockopt()

下面是一些例子:

所以:SCTP多导

I=sizeof(State);if(ret= getsockopt(sock,SOL_SCTP,SCTP_STATUS,&status,(socklen_t *)&i)) != 0) perror("getsockopt");printf("\nSCTP状态:\n-“);printf("assoc id =%d”,status.sstat_assoc_id);printf("state = %d\n",status.sstat_state);printf("instrms = %d\n",status.sstat_instrms);printf("outstrms =%d n“,status.sstat_outstrms);

C中的SCTP服务器客户端代码

//check status opt\_len = (socklen\_t) sizeof(struct sctp\_status); getsockopt(SctpScocket, IPPROTO\_SCTP, SCTP\_STATUS, &status, &opt\_len);

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/495420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档