2017-02-19 4 views
0

を引き起こしています問題は、WinDivertがパケットをキューに送信するのを停止し、ネットワークが最終的に切断されることが原因と考えられます。WinDivertパケットキューは<p></p> など、私は新しいキューにWinDivertから受信したパケットを渡すと私は受け取ったパケットにタイムスタンプを追加できるように受信/パケットを送信するためにマルチスレッドを使用してい断線

私は、WinDivertキューの長さ/時間とスレッドの優先順位付けと、欠落しているチェックサムの再計算を試みました。

問題を再現するには、コードをデバッグするときにspeedtest.netを使用して1-2のspeedtestsを実行します。使用

WinDivertラッパー:https://github.com/TechnikEmpire/DivertPInvoke

+0

回答が得られなかった場合、それを編集することは正しい応答ではありません。代わりに、downvoteまたはフラグを立て、問題の内容を説明してください。 –

+0

あなたの編集は何らかの形で投稿を改善しなかったことを除いて(編集後に100%建設的でなく完全に無関係である)、実際には、そのユーザーに何が期待されているかを教える方法に立っている。そうしないでください。編集は理解しにくい良い回答のためのものですが、最初の回答でなければ編集が助けになりません。 –

+0

元のポスターの意図が何であったかを誰が知ることができますか?その後のルールは重要ではありませんでした。あなたの編集は、ウィンドウの破損の場合と同じくらい悪く、回答をより迅速に削除するために何もしませんでした。回答への返答にコメントを残すことは、誰も「類似の投稿を投稿してもいいという印象を取らないようにする」正しい方法です。また、なぜあなたは答えを「コメント」と呼んでいるのですか? –

答えて

1

問題は、コードをデバッグ中speedtest.netを用い1-2 speedtestsを実行することにより再生することができます。

WinDivertでいくつかのデバッガを実行すると、デッドロックを引き起こす可能性があることを注意: https://github.com/basil00/Divert/issues/26

そうでなければ、はい、十分なトラフィックをWinDivertアプリケーションを圧倒することが可能です。ユーザーアプリケーションとの間でパケットをやり取りすると、オーバーヘッドが大きくなります。本当にこれを行うには、(1)複数のスレッドを実行し、(2)非ブロック化WinDivertSendExを使用して、結果を待たずにパケットを送信します。参照: https://github.com/basil00/Divert/blob/master/examples/streamdump/streamdump.c

+0

デバッガの外部で実行すると、切断問題が解決されたようです。これは、WinDivertSendExを使用している場合の例のコードでわかるように、非常に高いpingを引き起こすオーバーヘッドですが、このために複数のスレッドを作成するかどうか不明です。スレッドは受信と送信の両方に対応している必要があります。私は 'WinDivertRecvEx'を使うべきですか? – Tod

+0

デザインはアプリケーションに依存するので、それはあなた次第です。しかし、一般的に、N個のスレッドが並列にパケットを処理することは1より良いです。 – Basil

+0

私は複数のスレッドを使用しようとしましたが、大きな違いはありませんでした。私はあなたがここを見れば最新のエラーに関する新しい質問を投稿しました:https://stackoverflow.com/questions/44136191/windivert-connection-loss – Tod

関連する問題