8. Considérations d'implémentation
L'algorithme de sélection d'adresse de destination a besoin d'informations sur les adresses source potentielles. Une stratégie d'implémentation possible est pour getaddrinfo() d'appeler la couche réseau avec une liste d'adresses de destination, de trier la liste dans la couche réseau avec une connaissance complète des adresses source disponibles, et de retourner la liste triée à getaddrinfo(). Ceci est simple et donne les meilleurs résultats, mais cela introduit la surcharge d'un autre appel système. Une façon de réduire cette surcharge est de mettre en cache la liste d'adresses triée dans le résolveur, de sorte que les appels suivants pour le même nom n'aient pas besoin de re-trier la liste.
Une autre stratégie d'implémentation est d'appeler la couche réseau pour récupérer les informations d'adresse source puis de trier la liste d'adresses directement dans le contexte de getaddrinfo(). Pour réduire la surcharge dans cette approche, les informations d'adresse source peuvent être mises en cache, amortissant la surcharge de leur récupération sur plusieurs appels à getaddrinfo(). Dans cette approche, l'implémentation pourrait ne pas avoir la connaissance de l'interface sortante pour chaque destination, elle PEUT donc utiliser une définition plus lâche de l'ensemble candidat pendant l'ordonnancement d'adresse de destination.
Dans tous les cas, si l'implémentation utilise des informations en cache et possiblement périmées dans son implémentation de sélection d'adresse de destination ou si l'ordonnancement d'une liste en cache d'adresses de destination est possiblement périmé, alors elle DOIT s'assurer que l'ordonnancement d'adresse de destination retourné à l'application n'est pas plus vieux qu'une seconde. Par exemple, une implémentation pourrait faire un appel système pour vérifier si des entrées de table de routage, des assignations d'adresse source ou des entrées de table de politique de préfixe qui pourraient affecter ces algorithmes ont changé. Une autre stratégie est d'utiliser un compteur d'invalidation qui est incrémenté chaque fois qu'un état sous-jacent est modifié. En mettant en cache la valeur actuelle du compteur d'invalidation avec l'état dérivé puis en comparant ultérieurement avec la valeur actuelle, l'implémentation pourrait détecter si l'état dérivé est potentiellement périmé.