首页 > 解决方案 > SCTP Sockets API Extensions 中的错误处理是如何工作的?

问题描述

我一直在尝试为 SCTP 套接字的 Linux 接口实现一个包装库,但我不确定如何集成错误的异步样式(它们通过事件传递)。我见过的所有示例代码,如果它完全处理错误,只是在收到错误时打印出与错误相关的信息,但是在那里插入错误处理代码似乎是无效的,因为到那时所有与发送的原始消息相关的上下文已丢失,只有一个 32 位整数sinfo_context遗迹。似乎也无法直接判断给定消息何时已被远程对等方成功确认,这将使得无法实现在发送消息后侦听错误的方法,因为成功传递的上下文信息消息永远无法释放。

有没有办法处理与给定发送操作相关的错误作为send函数调用的一部分,或者有没有不同的方法来处理 SCTP 的错误处理而不会丢失错误的上下文?

我考虑过的一种解决方案是使用SCTP_SENDER_DRY通知来告知何时发送了数据包,但这需要一次只发送一个数据包。另一个想法是使用对等方的接收器窗口大小和sinfo_cumtsn字段sctp_sndrcvinfo来计算有多少数据已被确认为使用累积 TSN 完全接收,但是这样做有几个缺点:首先,它需要记账开销来计算基于累积 TSN 的对等方接收的字节数(尤其是在对等方的窗口大小可能发生变化的情况下);其次,它需要等到所有较早的数据包都收到后才报告成功,这似乎违背了 SCTP 多流的目的;第三,它似乎不适用于无序的数据包。

标签: sctp

解决方案


推荐阅读