8. Implementation Considerations (Considerazioni sull'Implementazione)
L'algoritmo di selezione dell'indirizzo di destinazione necessita di informazioni sugli indirizzi sorgente potenziali. Una possibile strategia di implementazione è che getaddrinfo() effettui una chiamata al livello di rete con un elenco di indirizzi di destinazione, ordini l'elenco nel livello di rete con piena conoscenza corrente degli indirizzi sorgente disponibili e restituisca l'elenco ordinato a getaddrinfo(). Questo è semplice e fornisce i migliori risultati, ma introduce l'overhead di un'altra chiamata di sistema. Un modo per ridurre questo overhead è memorizzare nella cache l'elenco di indirizzi ordinato nel resolver, in modo che le chiamate successive per lo stesso nome non debbano riordinare l'elenco.
Un'altra strategia di implementazione è effettuare una chiamata al livello di rete per recuperare le informazioni sull'indirizzo sorgente e quindi ordinare l'elenco di indirizzi direttamente nel contesto di getaddrinfo(). Per ridurre l'overhead in questo approccio, le informazioni sull'indirizzo sorgente possono essere memorizzate nella cache, ammortizzando l'overhead del loro recupero su più chiamate a getaddrinfo(). In questo approccio, l'implementazione potrebbe non avere conoscenza dell'interfaccia in uscita per ciascuna destinazione, quindi PUÒ utilizzare una definizione più flessibile dell'insieme di candidati durante l'ordinamento degli indirizzi di destinazione.
In ogni caso, se l'implementazione utilizza informazioni memorizzate nella cache e possibilmente obsolete nella sua implementazione della selezione dell'indirizzo di destinazione o se l'ordinamento di un elenco memorizzato nella cache di indirizzi di destinazione è possibilmente obsoleto, allora DEVE garantire che l'ordinamento degli indirizzi di destinazione restituito all'applicazione non sia più vecchio di un secondo. Ad esempio, un'implementazione potrebbe effettuare una chiamata di sistema per verificare se qualche voce della tabella di routing, assegnazione di indirizzi sorgente o voce della policy table dei prefissi che potrebbe influenzare questi algoritmi è cambiata. Un'altra strategia è utilizzare un contatore di invalidazione che viene incrementato ogni volta che viene modificato qualsiasi stato sottostante. Memorizzando nella cache il valore corrente del contatore di invalidazione con lo stato derivato e poi confrontandolo successivamente con il valore corrente, l'implementazione potrebbe rilevare se lo stato derivato è potenzialmente obsoleto.