标题可能解释得最好。
无论如何,我有一个从另一个源接收的数据缓冲区,我想在一个包含序列号(作为第一个字节)的UDP数据包中发送它 - >我想将序列号添加到给定的缓冲区中!
不是分配新缓冲区,而是设置大小为+4的大小,将序列号设置为第一个字节并将数据复制到缓冲区中,我想只使用WSA的分散收集机制。
遗憾的是,没有WSA文档明确指定WSASend保证所有缓冲区都将被发送一个数据包(数据包大小将保持为< 1500字节)。
我可以肯定它会以那种方式运作吗?或者我应该重新构建数据包吗?
最佳, 丹尼尔
答案 0 :(得分:3)
以循环方式记录:
对于面向消息的套接字,不要超过底层提供程序的最大消息大小,这可以通过获取套接字选项SO_MAX_MSG_SIZE的值来获得。如果数据太长而无法通过底层协议原子传递,则返回错误WSAEMSGSIZE,并且不传输任何数据。
很明显,它将来自缓冲区的数据组合成一个UDP数据包。如果没有,则返回WSAEMSGSIZE错误没有意义。