usrsctp发送缓冲区不会释放自身

时间:2017-04-27 14:56:47

标签: c++ sctp sysctl rtcdatachannel

我们正在使用C++ webrtc data channels library并在我们的test application中,在发送一些总数约为256kB的小数据包时,usrsctp_sendv()调用返回-1(将errno作为EWOULDBLOCK/EAGAIN,这意味着"资源暂时不可用")。我们认为这是因为我们正在达到usrsctp的发送缓冲区限制,默认情况下为256 kB。我们尝试在每个发送调用之间添加几个睡眠延迟,希望它清除缓冲区,但没有任何作用。

接收方(JS网页)确实收到了我们发送的所有字节,直到它出错。值得注意的是,只有当我们尝试将数据从C ++应用程序发送到JS而不是相反时,才会发生这种情况。我们试图了解mozilla的datachannels实施情况,但似乎无法就该问题得出任何结论。

1 个答案:

答案 0 :(得分:1)

很难立即回答这个问题。我将开始研究wireshark跟踪,以查看您的远程端(JS页面)是否实际确认您发送的数据(例如,如果发回SACK块),以及这些SACK中报告的接收缓冲区(a_rwnd)的值是多少。它可能不是你的问题,但是你得到EWOULDBLOCKS只是因为发送方SCTP无法从缓冲区刷新数据,因为它仍在等待来自远程端的传送确认。 请提供有关您案例的更多详细信息,如果有可能,请提供JS页面的示例代码。