Pourquoi devrais-je utiliser ou ne pas utiliser MSG_CONFIRM?

Je connais les sockets BSD et, feuilletant la page de manuel de sendto , je suis MSG_CONFIRM drapeau MSG_CONFIRM , qui m’est assez mystérieux pour le moment.

La description dit:

Indiquez à la couche de liaison que les progrès ont été réalisés: vous avez obtenu une réponse positive de l’autre côté. Si la couche de liaison ne l’obtient pas, elle interrogera régulièrement le voisin (par exemple, via un ARP unicast). Valable uniquement sur les sockets SOCK_DGRAM et SOCK_RAW et actuellement mis en œuvre uniquement pour IPv4 et IPv6.

Après un rapide coup d’œil à la page de manuel de arp , je comprends que le marquage de quelque chose par MSG_CONFIRM empêche l’adresse MAC de mappage ARP address l’adresse IP de la machine distante d’être considérée comme périmée.

Maintenant, je suis perplexe parce que je ne vois aucune raison pour laquelle je ne devrais pas le dire et, par conséquent, pourquoi n’ont-ils pas appliqué cela directement dans la bibliothèque. Pourquoi la couche d’application doit-elle s’occuper de tout ce qui se passe là-bas au niveau de la couche liaison?

Alors ai-je manqué quelque chose? quand dois-je le définir, ou ne pas le définir?

Vous ne devez activer l’indicateur que si le datagramme que vous envoyez est une réponse directe à un datagramme que vous venez de recevoir du même homologue.

Si vous envoyez une demande initiale ou un datagramme en réponse à un autre événement (comme une entrée utilisateur ou un délai d’attente), vous ne devez pas définir l’indicateur MSG_CONFIRM .

La raison pour ne pas l’envoyer est dans le cas où l’adresse MAC de l’IP change dans le temps. Si vous demandez constamment à votre système de ne pas effectuer de vérification, il continuera d’envoyer sur le même MAC, même si l’adresse IP n’y est plus.

Il semble que le cas de son envoi nécessite une situation très particulière dans laquelle vous pouvez garantir le destinataire des messages. Les frais généraux d’une demande ARP périodique étant très faibles, les avantages sont extrêmement limités.