WSASend是否将所有WSABUF缓冲区作为单个数据包发送?

时间:2013-12-01 15:35:43

标签: c++ c sockets winsock2

标题可能解释得最好。

无论如何,我有一个从另一个源接收的数据缓冲区,我想在一个包含序列号(作为第一个字节)的UDP数据包中发送它 - >我想将序列号添加到给定的缓冲区中!

不是分配新缓冲区,而是设置大小为+4的大小,将序列号设置为第一个字节并将数据复制到缓冲区中,我想只使用WSA的分散收集机制。

遗憾的是,没有WSA文档明确指定WSASend保证所有缓冲区都将被发送一个数据包(数据包大小将保持为< 1500字节)。

我可以肯定它会以那种方式运作吗?或者我应该重新构建数据包吗?

最佳, 丹尼尔

1 个答案:

答案 0 :(得分:3)

以循环方式记录:

  

对于面向消息的套接字,不要超过底层提供程序的最大消息大小,这可以通过获取套接字选项SO_MAX_MSG_SIZE的值来获得。如果数据太长而无法通过底层协议原子传递,则返回错误WSAEMSGSIZE,并且不传输任何数据。

很明显,它将来自缓冲区的数据组合成一个UDP数据包。如果没有,则返回WSAEMSGSIZE错误没有意义。