usrsctp 发送缓冲区不会自行释放
Posted
技术标签:
【中文标题】usrsctp 发送缓冲区不会自行释放【英文标题】:usrsctp send buffer does not free itself 【发布时间】:2017-09-25 10:59:00 【问题描述】:我们正在使用C++ webrtc data channels library 和test application,在发送一些总大小约为256kB 的小数据包时,usrsctp_sendv()
调用返回-1(errno 为EWOULDBLOCK/EAGAIN
,这意味着“资源暂时不可用”)。我们认为这是因为我们达到了 usrsctp 的发送缓冲区限制,默认为 256 kB。我们尝试在每次发送调用之间添加几个睡眠延迟,希望它清除该缓冲区,但没有任何效果。
接收方(一个 JS 网页)确实会接收到我们发送的所有字节,直到它出错。还值得注意的是,这只发生在我们尝试将数据从 C++ 应用程序发送到 JS 时,而不是相反。我们尝试查看 mozilla 的 datachannels 实现,但似乎无法就问题可能得出任何结论。
【问题讨论】:
【参考方案1】:很难马上回答这样的问题。我将开始查看wireshark跟踪,以查看您的远程端(JS页面)是否确实确认了您发送的数据(即,如果SACK块被发回)以及这些SACK中报告的接收缓冲区(a_rwnd)的值是多少。这可能不是您的问题,但是您收到 EWOULDBLOCKS 只是因为发送方 SCTP 无法从缓冲区刷新数据,因为它仍在等待来自远程端的传递确认。 请提供有关您的案例的更多详细信息,如果可能的话,请提供您的 JS 页面的示例代码。
【讨论】:
是的!这就是我要去的地方。我正在尝试首先删除 webRTC 库中的 DTLS 层,以便我可以分析数据包。这是JS page以上是关于usrsctp 发送缓冲区不会自行释放的主要内容,如果未能解决你的问题,请参考以下文章
在重叠模式下使用 WSASend 时,我应该何时释放缓冲区?