我有一個使用WSAASyncSelect將套接字置於異步模式的套接字庫的問題。在異步模式下,套接字被置於非阻塞模式(在阻塞的任何操作上返回WSAWOULDBLOCK),並且將窗口消息發佈到通知窗口,以通知應用程序套接字何時可以被讀取,寫入等。從異步套接字讀取數據最佳
我的問題是這樣的 - 接收FD_READ事件,我不知道有多少字節的嘗試和recv時。如果我傳遞的緩衝區太小,那麼winsock會自動發佈另一個FD_READ事件,告訴我更多要讀取的數據。如果數據以非常快的速度到達,可以使用FD_READ消息使消息隊列飽和,並且由於只有當消息隊列爲空時纔會發送WM_TIMER和WM_PAINT消息,這意味着如果應用程序接收到大量數據並使用異步緩衝區太小的套接字。
然後製作緩衝區有多大?我嘗試使用ioctlsocket(FIONREAD)來獲取要讀取的字節數,並製作一個完全相同的緩衝區,但是,KB192599明確警告說,這種方法充滿效率低下。
如何挑選足夠大的緩衝區大小,但不是瘋狂的大?
我會用SO_RCVBUF作爲最明智的緩衝區大小來使用。 – 2010-01-03 11:08:43