跳到主要内容

8. Implementation Considerations (实现考虑)

8. Implementation Considerations (实现考虑)​

目标地址选择算法需要有关潜在源地址的信息.一种可能的实现策略是让 getaddrinfo() 使用目标地址列表调用到网络层, 在网络层中使用当前可用源地址的完整知识对列表进行排序, 并将排序后的列表返回给 getaddrinfo().这很简单并给出最佳结果, 但它引入了另一个系统调用的开销.减少此开销的一种方法是在解析器中缓存排序后的地址列表, 以便对同一名称的后续调用不需要重新排序列表.

另一种实现策略是调用到网络层以检索源地址信息, 然后直接在 getaddrinfo() 的上下文中对地址列表进行排序.为了减少这种方法的开销, 可以缓存源地址信息, 在多次调用 getaddrinfo() 时分摊检索它的开销.在这种方法中, 实现可能不知道每个目标的出站接口, 因此在目标地址排序期间它可以使用候选集的更宽松定义.

无论如何, 如果实现在其目标地址选择实现中使用缓存的可能过时的信息, 或者如果缓存的目标地址列表的排序可能过时, 那么它必须确保返回给应用程序的目标地址排序不超过一秒钟过期.例如, 实现可能进行系统调用以检查任何可能影响这些算法的路由表条目, 源地址分配或前缀策略表条目是否已更改.另一种策略是使用失效计数器, 每当任何底层状态更改时该计数器就会递增.通过使用派生状态缓存当前失效计数器值, 然后稍后与当前值进行比较, 实现可以检测派生状态是否可能过时.