我想知道有关Windows下重叠I / O的信息,包括有无I / O完成端口。 我事先知道在使用WSASend()后我将收到多少数据包。
所以我想这样做
for (int i = 0; i < n; i++)
WSARecv(sock, &buffer_array[i], 1, NULL, 0, &overlapped, completion_routine);
我的问题是:如果通知填充缓冲区,我怎么知道填充了哪个缓冲区?我的意思是,不按调用顺序猜测(缓冲区[0],缓冲区[1],缓冲区[2]等)。
我会找到一种替代解决方案,例如,在通知时给我缓冲区指针更加干净,并且随着应用程序设计的发展,更容易更改/适应。
感谢。
答案 0 :(得分:2)
现在您正在开始n
并发接收操作。相反,一个接一个地启动它们。当前一个完成时开始下一个。
答案 1 :(得分:0)
使用完成例程时,OVERLAPPED块中的hEvent字段未使用,可用于将上下文信息传递到完成例程。通常,这将是指向缓冲区类实例的指针或缓冲区实例数组的索引。通常,OVL块将是实例的结构成员,因为每次调用需要单独的OVL。