gpt4 book ai didi

c++ - usrsctp 发送缓冲区不会自行释放

转载 作者:太空狗 更新时间:2023-10-29 22:57:35 24 4
gpt4 key购买 nike

我们正在处理 C++ webrtc data channels library在我们的 test application ,在发送几个总计约 256kB 的小数据包后,usrsctp_sendv() 调用返回 -1(errno 为 EWOULDBLOCK/EAGAIN,这意味着“资源暂时不可用”)。我们认为这是因为我们达到了 usrsctp 的发送缓冲区限制,默认情况下为 256 kB。我们尝试在每次发送调用之间添加几个 sleep 延迟,希望它能清除该缓冲区,但没有任何效果。

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

最佳答案

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

关于c++ - usrsctp 发送缓冲区不会自行释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43661320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com