linux sendmsg()中的辅助数据如何工作?

elcex8rz  于 9个月前  发布在  Linux
关注(0)|答案(2)|浏览(107)

sendmsg()允许将辅助数据发送到另一个套接字。我想知道这是如何工作的。
1.辅助数据是否与正常消息一起沿着?
1.如果是这样,远程接收套接字如何知道如何解析它?
1.远程接收客户端如何检索此辅助数据?

kqlmhetl

kqlmhetl1#

辅助数据不会通过导线发送-永远不会。对于Unix域套接字,辅助数据用于在进程之间发送或接收文件描述符,以共享或负载平衡任务。注:Unix域套接字在同一台机器上运行的进程之间传输信息,而不是在不同机器上运行的进程之间传输信息。
同样,如果进程运行在不同的机器上:您的数据包不使用任何辅助概念将是完全相同的数据包时,辅助概念应用于发送机(或接收机)。因此,辅助数据不是与您的数据包一起发送的。
辅助数据用于从内核到用户空间应用程序接收 EXTRA 数据包相关服务/信息,否则不可用。例如,假设机器B在线路上接收到一些数据包,您想知道数据包从哪个入口接口到达?你怎么知道的辅助数据来救援。
辅助数据是在辅助控制缓冲区中设置的一种标志,当sendmsg()/recvmsg()被调用时传递给内核,它告诉内核当数据包被发送或到达时,需要向调用这些调用的应用程序提供哪些额外的服务/信息。
辅助数据是指内核和用户空间应用程序之间的通信,或者在UNIX套接字的情况下,同一机器上的进程之间的通信。这不是电线上的包所具有的东西。

vpfxa7rd

vpfxa7rd2#

您只能以几种选定的方式使用辅助数据:

  • 您可以使用它来获取接收接口(IPv4)
  • 您可以使用它来指定跃点限制(对于IPv6)
  • 您可以使用它来指定流量类别(同样是IPv6)
  • ....
    *可用于传递/接收文件描述符或用户凭据(Unix域)

这三种情况只是通过recvmsg(2)从内核区接收控制信息的人工API方法。最后一个是最有趣的:辅助数据 * 实际上被发送 * 的唯一情况是Unix域套接字,在那里一切都发生在内核中,所以实际上没有任何东西到达线路。

相关问题