WSARecv()和多个缓冲区
问题描述:
我想用WSARecv的精度。WSARecv()和多个缓冲区
基本上,你似乎可以使用该函数与WSABUF数组。
1-在重叠的I/O上下文WITHOUT完成端口,说我在数据报套接字使用的WSARecv()为48个WSABUFs阵列,它意味着可以接收48个不同的UDP数据包(1包为每个缓冲区)在一次通话中(说他们到达相同的时刻)? 或者是接收48个数据包的唯一方式是在发出事件(使用与事件重叠的I/O但不重复完成端口)后48次使用WSARecv()。
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的数组的目的是什么?我的意思是,只有一个正确的尺寸就足够了吗?
非常感谢!
答
One WSARecv()
==一个数据报。如果您事先知道这些事情有多大,您可以使用多个缓冲区将该数据报分成报头,正文,预告片等。它不会让您一次收到48个数据报。
+0
我明白了,所以这基本上是将分组分成逻辑在可能的情况下,一次部件接受答案 – Yannick
'WSABUF数组的目的是什么?'微软提供的一些解释:https://msdn.microsoft.com/en-us/library/windows/desktop/ms740138%28v=vs.85%29。 aspx Scatter/Gather I/O –
是的,我之前读过那个页面,但是由于我在网络编程方面的新东西,我不太清楚什么是分散/聚集I/O – Yannick