我想要 WSARecv 的精度。
基本上,您似乎可以将函数与 WSABUF 数组一起使用。
1- 在重叠的 I/O 上下文中 WITHOUT 完成端口,假设我在具有 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);
用这个?
WSARecv(sock, buffer_array, 48, NULL, 0, &overlapped, completion_routine);
基本上这是否意味着使用 48 个缓冲区调用 WSARecv() 将发布 48 个读取请求?
3- 如果不是,WSABUF 数组的用途是什么?我的意思是,只有一个尺寸正确就够了吗?
非常感谢!
最佳答案
一个 WSARecv()
== 一个数据报。多个缓冲区允许您将该数据报拆分为标题、主体、尾部等,如果您事先知道这些东西有多大的话。它不会让您一次接收 48 个数据报。
关于c++ - WSARecv() 和多个缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30639868/