WSARecv() 和多个缓冲区

WSARecv() and multiple buffers

我想要 WSARecv 的精度。

基本上,您似乎可以将函数与 WSABUF 数组一起使用。

1- 在重叠的 I/O 上下文 WITHOUT 完成端口中,假设我在具有 48 个 WSABUF 数组的数据报套接字上使用 WSARecv(),这是否意味着我可以在一次调用中接收 48 个不同的 UDP 数据包(每个缓冲区 1 个数据包)(假设它们在同一时刻到达)? 或者接收 48 个数据包的唯一方法是在事件发出信号后使用 WSARecv() 48 次(使用重叠的 I/O 事件而不是完成端口,我重复)。

2- 在上下文 WITH I/O 完成 ports/overlapped I/O 中,这是否意味着我可以替换此

int n = 48;
for (int i = 0; i < n; i++)
   WSARecv(sock, &buffer_array[i], 1, NULL, 0, &overlapped, completion_routine);

有了这个?

WSARecv(sock, buffer_array, 48, NULL, 0, &overlapped, completion_routine);

基本上这是否意味着使用 48 个缓冲区调用 WSARecv() 将 post 48 个读取请求?

3- 如果不是,WSABUF 数组的用途是什么?我的意思是,只有一个正确的尺寸就足够了吗?

非常感谢!

一个WSARecv() ==一个数据报。多个缓冲区允许您将该数据报拆分为 header、body、尾部等​​,如果您事先知道这些东西有多大的话。它不会让您一次收到 48 个数据报。