我将收到的数据包从WinDivert传递到新的队列,并使用多线程发送/接收数据包,以便我可以为收到的数据包添加时间戳等。
问题似乎是WinDivert停止向队列发送数据包,导致网络最终断开连接。
我已尝试最大化WinDivert队列长度/时间和线程优先级,并重新计算缺少的校验和。
通过在调试代码时使用speedtest.net运行1-2次测试,可以重现该问题。
使用的WinDivert包装:https://github.com/TechnikEmpire/DivertPInvoke
答案 0 :(得分:1)
通过在调试代码时使用speedtest.net运行1-2次测试,可以重现该问题。
请注意,使用WinDivert运行某些调试器会导致死锁: https://github.com/basil00/Divert/issues/26
否则,是的,可以用足够的流量压倒WinDivert应用程序。向用户应用程序转发数据包和从用户应用程序转发数据包会增加很多开销。如果你真的想这样做,那么(1)运行多个线程,(2)使用非阻塞WinDivertSendEx
发送数据包而不等待结果。看到:
https://github.com/basil00/Divert/blob/master/examples/streamdump/streamdump.c