c++ - WSARecv() 和多个缓冲区

标签 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 数组的用途是什么?我的意思是,只有一个尺寸正确就够了吗?

非常感谢!

最佳答案

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

关于c++ - WSARecv() 和多个缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30639868/

相关文章:

c++ - 回滚 XML 功能

c - C 编程中的十进制到八进制转换(使用代码块)

c - C UNIX 中的隐式函数声明

c++ - 在 Visual Studio 中配置 "Application Verifier"

c++ - 使用空终止字符数组调试断言失败错误

c++ - 使用 QUdpSocket 作为 QIODevice 的正确方法是什么?

c - 在套接字编程中返回指向结构的指针

c++ - 在调用 recv() 之前检查错误

c# - 面向 .NET Framework 4.0

c - c中返回语句之前的段错误