【发布时间】:2015-06-11 10:42:57
【问题描述】:
关于 Windows 下的重叠 I/O,我想知道一些事情,包括有和没有 I/O 完成端口。 我预先知道使用 WSASend() 后我将收到多少数据包。
所以我想这样做
for (int i = 0; i < n; i++)
WSARecv(sock, &buffer_array[i], 1, NULL, 0, &overlapped, completion_routine);
我的问题是:在通知缓冲区已填满时,我如何知道哪个缓冲区已被填满?我的意思是,不用猜测调用的顺序(buffer[0]、buffer[1]、buffer[2] 等)。
我会找到一种替代解决方案,例如,在通知时让我的缓冲区指针更干净,并且随着我的应用程序设计的发展更容易更改/适应。
谢谢。
【问题讨论】:
-
这没什么意义,改用 WSARecvFrom() 吧。
-
@Hans Passant WSARecvFrom() 并没有什么更快或更有用的方法,相反,它与 IOCP 产生了反作用,因为它有一个线程专门用于从一个地址接收数据包。
标签: c++ sockets winapi winsock iocp