2017-02-19 74 views
0

我傳遞接收的分組從WinDivert到一個新的隊列,並使用多線程來發送/接收數據包,這樣我可以添加時間戳所接收到的分組等WinDivert分組隊列是造成斷開

的問題似乎是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

在調試器外部執行似乎已修復了斷開連接問題。現在,它只是造成極高ping的開銷,正如您在示例代碼中所看到的,我使用'WinDivertSendEx',但我不確定爲此創建多個線程,線程是否需要用於接收和發送,我應該使用'WinDivertRecvEx'嗎? – Tod

+0

設計依賴於應用程序,因此取決於您。但總的來說,並行處理數據包的N個線程優於1. – Basil

+0

我嘗試過使用多線程,但它並沒有太大的區別,我不認爲它是導致問題的線程。我發佈了一個關於我遇到的最新錯誤的新問題,如果您可以在此處查看:https://stackoverflow.com/questions/44136191/windivert-connection-loss – Tod