WSARecv()和多个缓冲区

时间:2015-06-04 09:19:31

标签: c++ c sockets asynchronous winsock2

我想要一个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的目的是什么?我的意思是,只有一个正确的尺寸就足够了吗?

非常感谢!

1 个答案:

答案 0 :(得分:6)

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