问题描述
我一直在尝试为 SCTP 套接字的 Linux 接口实现一个包装库,但我不确定如何集成异步错误样式(它们通过事件传递)。我所看到的所有示例代码,如果它完全处理错误,则在接收到错误时简单地打印出与错误相关的信息,但是在那里插入错误处理代码似乎是无效的,因为到那时所有与发送的原始消息相关的上下文已经丢失,只剩下一个 32 位整数 sinfo_context
。似乎也没有办法直接告诉远程对等体何时成功确认给定消息,这使得无法实现发送消息后侦听错误的方法,因为成功传递的上下文信息消息永远无法释放。
有没有办法处理与给定发送操作相关的错误作为调用 send
函数的一部分,或者有没有不同的方法来处理 SCTP 的错误处理而不会丢失上下文错误?
我考虑过的一种解决方案是使用 SCTP_SENDER_DRY
通知来判断何时发送了数据包,但这一次只需要发送一个数据包。另一个想法是使用对等方的接收器窗口大小和 sinfo_cumtsn
的 sctp_sndrcvinfo
字段来计算使用累积 TSN 已确认已完全接收的数据量,但是这样做有几个缺点:首先,它需要簿记开销来根据累积的 TSN 计算对端接收到的字节数(尤其是在对端窗口大小可能发生变化的情况下);其次,它需要等到所有较早的数据包都接收到才报告成功,这似乎违背了 SCTP 多流的目的;第三,它似乎不适用于无序数据包。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)