我为什么要使用或不使用MSG_CONFIRM?

时间:2013-05-16 18:01:59

标签: c sockets arp

我熟悉BSD套接字,然后翻阅sendto的手册页,我碰到了MSG_CONFIRM标志,这对我来说是非常神秘的。

描述说:

  

告诉链接层前进的进展:你有一个   来自对方的成功回复。如果链接层没有得到   这将定期重新填充邻居(例如,通过单播ARP)。   仅在SOCK_DGRAM和SOCK_RAW套接字上有效且当前有效   仅针对IPv4和IPv6实施。

在快速查看arp的手册页后,我了解标记某些内容MSG_CONFIRM可防止ARP映射MAC地址↔远程计算机的IP地址被视为过时。

现在我感到困惑,因为我看不出任何理由为什么我应该把它,因此,为什么他们不直接在库中强制执行。为什么应用层应该处理在链路层发生的任何事情。

所以我错过了什么?我什么时候应该设置它,还是不设置它?

2 个答案:

答案 0 :(得分:6)

如果您发送的数据报是对刚从同一对等方收到的数据报的直接响应,则只应设置该标志。

如果您正在发送初始请求,或者发送数据报以响应某些其他事件(例如用户输入或超时),那么您应该设置{{1} } flag。

答案 1 :(得分:2)

不发送它的原因是IP的mac地址随时间变化。如果您经常告诉系统不要检查,即使IP地址不存在,它也会继续发送到同一个MAC。

似乎发送它的情况需要一个非常特殊的情况,您可以保证有关您的邮件收件人的事情。定期ARP请求的开销非常低,因此效益非常有限。