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 个数据报。
我想要 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 个数据报。