2011-03-22 108 views
0

我做了一些IOCP服務器和客戶端測試。 IOCP服務器接受客戶端的連接,除了從客戶端接收數據包之外什麼也不做。 客戶端連接服務器並在infinit循環中將數據包發送到服務器。IOCP接受並保持的最大連接數是多少

我設置了一個計數器。它在服務器接受客戶端時增加,並在套接字關閉時減少。

這裏是問題: 計數器增加到32261,不再增加。服務器不能接受更多的連接,GetLastError()返回10055,WSAENOBUF。

我的操作系統是Windows XP,內存爲4GB。我已檢查未分頁的內存。我覺得我的記憶足夠了。

什麼限制連接的最大值? 如何放大最大連接數?

回答

0

不可分頁內存的限制被擊中。 您是否在使用Push Framework進行IOCP測試?

1

很難說在沒有看到您的代碼的情況下導致問題的原因。這不可能是非分頁池枯竭;我在Windows Server 2003上運行測試,只有760MB RAM,並且使用基於IOCP的服務器實現了超過70,000個併發連接(請參閱here)。它可能是I/O頁面鎖定限制(請參閱here);但是這取決於你的服務器在接受連接後做了什麼,是否發佈了讀取,如果是的話,是什麼緩衝區大小?據我所知,BOTH非頁面緩衝池耗盡和I/O頁面鎖定限制會給出WSAENOBUF錯誤。

你是否在更現代的和/或服務器類的操作系統上試過了你的測試? Vista和更高版本使更多的非分頁池可用(詳情請參閱here)...

相關問題