WSARecv()和多个缓冲区

Yan*_*ick 4 c c++ sockets asynchronous winsock2

我想要一个WSARecv精度.

基本上你似乎可以使用带有WSABUF数组的函数.

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

2-在一个上下文WITH I/O完成端口/重叠的I/O,它意味着我可以更换这个

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

有了这个?

WSARecv(sock, buffer_array, 48, NULL, 0, &overlapped, completion_routine);
Run Code Online (Sandbox Code Playgroud)

基本上它是否意味着调用带有48个缓冲区的WSARecv()将发布48个读取请求?

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

非常感谢!

use*_*421 6

一个WSARecv()==一个数据报.多个缓冲区允许您将该数据报拆分为标题,正文,预告片等,如果您事先知道这些事情有多大.它不允许您一次收到48个数据报.