我熟悉BSD套接字,翻阅手册页sendto
,我碰到了MSG_CONFIRM
flag,这对我来说很神秘。
描述说:
告诉链路层发生了前向进展:你得到了对方的成功回复。如果链路层没有得到这个,它将定期重新探测邻居(例如,通过单播 ARP)。仅对 SOCK_DGRAM 和 SOCK_RAW 套接字有效,目前仅对 IPv4 和 IPv6 实施。
快速查看手册页后arp
,我了解到标记某些内容MSG_CONFIRM
可以防止 ARP 映射 MAC 地址 ↔ 远程机器的 IP 地址被认为是陈旧的。
现在我很困惑,因为我看不出有什么理由不应该放它,因此,他们为什么不直接在图书馆里强制执行。为什么应用层要处理链路层发生的任何事情。
所以我错过了什么吗?我应该什么时候设置它,或者不设置它?