sctp - SCTP Sockets API Extensions 中的错误处理是如何工作的?
问题描述
我一直在尝试为 SCTP 套接字的 Linux 接口实现一个包装库,但我不确定如何集成错误的异步样式(它们通过事件传递)。我见过的所有示例代码,如果它完全处理错误,只是在收到错误时打印出与错误相关的信息,但是在那里插入错误处理代码似乎是无效的,因为到那时所有与发送的原始消息相关的上下文已丢失,只有一个 32 位整数sinfo_context
遗迹。似乎也无法直接判断给定消息何时已被远程对等方成功确认,这将使得无法实现在发送消息后侦听错误的方法,因为成功传递的上下文信息消息永远无法释放。
有没有办法处理与给定发送操作相关的错误作为send
函数调用的一部分,或者有没有不同的方法来处理 SCTP 的错误处理而不会丢失错误的上下文?
我考虑过的一种解决方案是使用SCTP_SENDER_DRY
通知来告知何时发送了数据包,但这需要一次只发送一个数据包。另一个想法是使用对等方的接收器窗口大小和sinfo_cumtsn
字段sctp_sndrcvinfo
来计算有多少数据已被确认为使用累积 TSN 完全接收,但是这样做有几个缺点:首先,它需要记账开销来计算基于累积 TSN 的对等方接收的字节数(尤其是在对等方的窗口大小可能发生变化的情况下);其次,它需要等到所有较早的数据包都收到后才报告成功,这似乎违背了 SCTP 多流的目的;第三,它似乎不适用于无序的数据包。
解决方案
推荐阅读
- excel - 如果选择了相应的 OptionButton,则仅更改单元格中的值
- javascript - 如何避免 NodeJS 中的循环依赖?
- excel - Sheets("sheet_1").ActiveCell.Offset(0, i + 1).Range("A1").Value 的正确语法是什么
- symfony - Symfony ArrayCollection
- google-bigquery - 从 Bigquery 中提取的美国和俄罗斯几何图形存在视觉失真
- python - 使用 python 3 远程执行函数
- office-js - 为什么无法使用 Word API Javascript 加载 listItem?
- netlogo - Netlogo龟14天后停止传染,感染后开始
- javascript - 使用 date-fns 显示 UTC 字符串
- python - 此平台不支持 Python 轮