如何在 SCTP 一对多风格 C 编程中仅关闭一个连接

问题描述 投票:0回答:1

C语言编程 我已经能够使用

创建一对多风格的 SCTP 连接
clientsockfd = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);

能够使用相同的单个套接字(绑定到单个本地 IP 和端口)向多个服务器发送连接和发送消息

发送消息时,我在每条消息中使用目标 ip:端口,

int res = sctp_sendmsg(clientsockfd, message, strlen(message), (struct sockaddr*)&server_addr1, sizeof(server_addr1), 0, SCTP_ADDR_OVER, 0, 0, 0);
   

现在我只想关闭这两个连接中的一个,我检查了 sctp 手册/api 参考文档。 它建议使用 SCTP_EOF 或 SCTP_ABORT 标志与特定的连接/关联 ID,我尝试了很多组合,但它导致两个连接都 ABORT。 有什么建议吗?

    sctp_sendmsg(clientsockfd, NULL, 0,NULL, 0, 0, SCTP_ABORT,asso_id,0,0);

sctp_sendmsg(clientsockfd, NULL, 0,(struct sockaddr*)&server_addr1, 0, 0, SCTP_ABORT,(uint16_t)sp.spinfo_assoc_id,0,0);

我读到此消息已被弃用。

gcc(Ubuntu 11.4.0-1ubuntu1~22.04)11.4.0

c sockets unix networking sctp
1个回答
0
投票

错误是,我没有传递 server_addr1 的长度,作为 sctp_send() 调用中的第 5 个参数

sctp_sendmsg(clientsockfd, NULL, 0,(struct sockaddr*)&server_addr1, 0, 0, SCTP_ABORT,(uint16_t)sp.spinfo_assoc_id,0,0);

工作 API 调用

sctp_sendmsg(clientsockfd, NULL, 0,(struct sockaddr*)&server_addr1,sizeof(server_addr1) , 0, SCTP_ABORT,(uint16_t)sp.spinfo_assoc_id,0,0);
  
© www.soinside.com 2019 - 2024. All rights reserved.