接收變更通知

許多用戶端可以同時更新路由表,而且當路由資訊變更發生時,必須通知用戶端。 例如,未通知另一個用戶端變更路由表的用戶端可能會公告過期的路由資訊。 這可以透過程式設計用戶端向路由表管理員註冊,以通知路由表中的變更。 路由表管理員會將變更通知傳送給註冊的所有用戶端,以接收這些變更。

變更通知僅適用于目的地。 沒有任何方法可以查詢路由表管理員,以取得特定路由的變更。

變更目的地的其中一個路由時,路由表管理員會傳送發生變更的通知。 此通知只會傳送給已向路由表管理員註冊的用戶端,以取得已發生的變更類型。 路由表管理員中路由資訊的所有變更都會發生在一或多個檢視中,而且可以在任何支援的檢視子集中要求變更通知訊息。

目前有三種類型的變更通知可供用戶端註冊:

  • 通知目的地路由的任何變更。 此要求是使用 RTM_CHANGE_TYPE_ALL 旗標進行。

  • 如果目的地的最佳路由變更,或目前最佳路由變更的下列任何資訊,則通知:

    • 喜好設定
    • 下一個躍點
    • 路由旗標

    此要求是使用 RTM_CHANGE_TYPE_BEST 旗標進行。

  • 除了最佳路由中非轉送旗標的變更之外,所有類型變更的通知RTM_CHANGE_TYPE_BEST。 例如,路由器管理員會在單播檢視中等候此類型的變更,並更新單播轉送器中的資訊。 此要求是使用 RTM_CHANGE_TYPE_FORWARDING 旗標進行。

變更通知的要求也可以藉由註冊變更通知至「標示」目的地,限制為目的地的子集。 用戶端可以呼叫 RtmMarkDestForChangeNotification來標記變更通知的目的地。

發生變更時,路由表管理員會檢查是否有任何用戶端必須收到這項變更通知。 如果符合下列所有條件,用戶端必須收到變更通知:

  • 發生的變更類型是用戶端已註冊通知的類型
  • 如果用戶端已要求所有目的地的變更,用戶端已標示的目的地或任何目的地的變更
  • 用戶端針對發生此變更的檢視要求變更通知

如果變更符合上述所有準則,則會快取變更,並通知用戶端。

通知不會指定實際變更的內容,只會指定它們已發生。 用戶端必須使用從先前呼叫RtmRegisterForChangeNotification取得的通知控制碼來呼叫RtmGetChangedDests來擷取變更。