在数据报套接字上使用sendmsg传入多struct iovec,会发送多个数据包吗?
sendmsg在UDP套接字上使用多缓冲区的行为
当你在数据报套接字(比如UDP)上调用sendmsg并传入多个struct iovec缓冲区时,这些缓冲区里的数据会被合并成一个单一的数据报发送出去,而不是拆分出多个数据报。
原因很直接:UDP是基于数据报的协议,每个sendmsg调用对应一个完整的数据报。不管你传入多少个分散的缓冲区,内核都会把它们拼接成连续的字节流,打包成一个UDP数据报发送。如果拼接后的总长度超过了UDP的最大报文长度(通常和MTU相关,比如以太网环境下约1500字节),这个操作可能会失败,或者数据报会在网络中被分片(具体取决于系统配置)。
举个实际的例子:假设你有两个iovec,第一个存着"hello ",第二个存着"world",调用sendmsg后,接收方收到的会是一个包含"hello world"的UDP数据报,而不是两个分别包含"hello "和"world"的独立报文。
内容的提问来源于stack exchange,提问作者Myria
相关产品推荐
相关产品推荐

