3

我们正在使用C++ webrtc 数据通道库,在我们的测试应用程序中,在发送一些总计约 256kB 的小数据包后,usrsctp_sendv()调用返回 -1(使用 errnoEWOULDBLOCK/EAGAIN表示“资源暂时不可用”)。我们认为这是因为我们达到了 usrsctp 的发送缓冲区限制,默认为 256 kB。我们尝试在每次发送调用之间添加几个睡眠延迟,希望它能清除缓冲区,但没有任何效果。

接收方(一个 JS 网页)确实会接收到我们发送的所有字节,直到它出错。还值得注意的是,这只发生在我们尝试将数据从 C++ 应用程序发送到 JS 时,而不是相反。我们尝试查看 Mozilla 的数据通道实现,但似乎无法就问题可能得出任何结论。

4

1 回答 1

1

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

于 2017-04-28T12:05:44.123 回答