我有一个使用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