3

C++ webrtc データ チャネル ライブラリを使用しており、テスト アプリケーションで、合計で約 256kB になるいくつかの小さなパケットを送信すると、usrsctp_sendv()呼び出しは -1 を返します (errnoEWOULDBLOCK/EAGAINは「リソースが一時的に利用できません」を意味します)。これは、デフォルトで 256 kB である usrsctp の送信バッファ制限に達しているためだと考えています。そのバッファをクリアすることを期待して、各送信呼び出しの間にいくつかのスリープ遅延を追加しようとしましたが、何も機能しません.

受信側 (JS Web ページ) は、エラーが発生するまで、送信したすべてのバイトを実際に受信します。これは、C++ アプリケーションから JS にデータを送信しようとしたときにのみ発生し、その逆では発生しないことにも注意してください。Mozillaのデータチャネルの実装を調べてみましたが、問題の原因について結論を出すことができないようです。

4

1 に答える 1

1

そのような質問にすぐに答えるのは難しいです。リモート側 (JS ページ) が実際に送信したデータを確認するかどうか (SACK チャンクが返送された場合)、およびこれらの SACK で報告された受信バッファー (a_rwnd) の値を確認するために、wireshark トレースの調査を開始します。あなたの側の問題ではない可能性がありますが、送信側の SCTP がリモート エンドからの配信確認をまだ待っているため、送信側の SCTP がバッファからデータをフラッシュできないという理由だけで、EWOULDBLOCKS を取得しています。ケースの詳細を提供してください。また、可能であれば、JS ページのサンプル コードを提供してください。

于 2017-04-28T12:05:44.123 に答える