2012-06-08 74 views
0

我試圖模擬阻斷通過減少內部的Winsock發送緩衝區到非常小的值發送()用setsockopt和2個線程在同一時間發送WSAEWOULDBLOCK ...如何在阻塞send()時模擬WSAEWOULDBLOCK?

滴速通過拔掉網線的連接或在防火牆中阻止它不足以填滿內部發送緩衝區並返回WSAEWOULDBLOCK?

我該怎麼做?

謝謝。

回答

1

接受遠程端的連接,但接受該位置的tarpit。繼續嘗試在本地發送,並且您應該能夠填寫用於傳出流量的數據緩衝區。

+0

如何在源代碼中設置tarp?睡在recv()循環?我嘗試過在MikroTik RouterOS中使用tarpiting(單向),但是沒有成功,客戶端使用WSAECONNRESET掛起send()。 我不記得我在哪裏看到Windows 7重新調整套接字緩衝區automaticaly和內部。這可能是我永遠無法填滿發送緩衝區的原因嗎? – youngrp

+0

是的,接受()連接並在遠端休眠。 – Specksynder

+0

現在我明白了。 Windows 7有16KB的發送緩衝區大小。當我發送更多的時候,send()會「阻塞」,直到所有的數據都進入內核,但如果我嘗試進行2次send()調用,最後一次發送大小大於16KB,則第二次發送)返回WSAEWOULDBLOCK。即使我把sleep()放在遠端的accept()之後,本地仍然在發送數據(怪異的)...... – youngrp

相關問題