在部分读取时,unix流辅助数据会发生什么?
因此,我已经阅读了很多有关unix流辅助数据的信息,但是所有文档中缺少的一件事是,如果部分读取,该怎么办? 假设我正在24字节缓冲区中接收以下消息 msg1 [20 byes] (no ancillary data) msg2 [7 bytes] (2 file descriptors) msg3 [7 bytes] (1 file descriptor) msg4 [10 bytes] (no ancillary data) msg5 [7 bytes] (5 file descriptors) 第一次调用recvmsg时,我会收到所有msg1(以及部分msg2?操作系统会这样做吗?)如果我获得了msg2的一部分,我是否会立即获取辅助数据,并需要保存以备下次读取当我知道消息实际上告诉我如何处理数据时?如果我从msg1释放20个字节,然后再次调用recvmsg,它将同时提供msg3和msg4吗?来自msg3和msg4的辅助数据是否在控制消息结构中串联在一起? 虽然我可以编写测试程序来通过实验找到答案,但我正在寻找有关辅助数据在流上下文中的行为的文档。我找不到任何官方材料,这似乎很奇怪。 我将在这里添加我的实验结果,这是我从该测试程序获得的: https://github.com/nrdvana/daemonproxy/blob/master/src/ancillary_test.c Linux 3.2.59、3.17.6 看起来,只要在调用recvmsg的过程中不需要传递先前的辅助有效负载,Linux就会将部分辅助消息附加到其他消息的末尾。一旦传递了一条消息的辅助数据,它将返回短读,而不是开始下一条辅助数据消息。因此,在上面的示例中,我得到的读数是: recv1: [24 bytes] (msg1 + partial msg2 with msg2's 2 file …