共用方式為


使用 Winsock 核心函式與事件回呼函式

針對特定通訊端作業,Winsock Kernel (WSK) 應用程式可以呼叫其中一個通訊端的 WSK 函式來執行作業,或在 WSK 子系統在與作業相關聯的 事件發生 時,在通訊端上啟用事件回呼函式。 例如,在連線導向通訊端上接收資料時,WSK 應用程式可以呼叫通訊端的 WskReceive 函式,或在通訊端上實作及啟用 WskReceiveEvent 事件回呼函式。 WSK 應用程式的需求會指示應用程式應該使用的方法。 如需如何使用這兩種方法的範例,請參閱 WSK 檔。

下列清單摘要說明每個方法的一些重點。

使用 Winsock 核心函式

  • WSK 應用程式會驅動通訊端作業,這表示 WSK 應用程式會在通訊端作業發生時控制。 這可能會簡化 WSK 應用程式所需的同步處理。

  • WSK 應用程式會將 IRP 提供給通訊端函式。 這些 IRP 會由 WSK 子系統排入佇列,直到通訊端作業完成為止。 如需搭配 WSK 函式使用 IRP 的詳細資訊,請參閱 搭配 Winsock 核心函式使用 IRP

  • WSK 應用程式可以等候 IRP 讓 WSK 子系統完成每個作業,來執行封鎖通訊端作業。

  • WSK 應用程式在某些情況下可能需要讓多個通訊端作業排入佇列,以確保連線導向通訊端上的高效能資料傳輸、防止在資料包通訊端上卸載傳入資料包,或防止接聽通訊端上的連入連線中斷。

  • WSK 應用程式會提供資料傳輸作業的資料緩衝區。 這可減少可能需要複製資料的次數。 不過,如果 WSK 應用程式將多個資料傳輸作業保留在佇列中,應用程式必須將資料緩衝區提供給每個佇列資料傳輸作業的 WSK 子系統。 因此,WSK 應用程式可能需要額外的記憶體資源。

使用事件回呼函式

  • WSK 子系統會驅動通訊端作業,這表示 WSK 子系統會藉由呼叫通訊端的事件回呼函式,通知通訊端事件的 WSK 應用程式。 WSK 應用程式可能需要更複雜的同步處理,才能處理事件回呼函式的非同步本質。

  • WSK 應用程式不會對通訊端作業使用 IRP。

  • WSK 應用程式不需要佇列通訊端作業。 WSK 子系統會在發生通訊端的事件時,立即呼叫 WSK 應用程式的事件回呼函式。 如果 WSK 應用程式可以跟上呼叫通訊端事件回呼函式的速率,則使用事件回呼函式可提供最高效能,以及卸載資料包或連入連線的最小機率。

  • WSK 子系統會提供資料傳輸作業的資料緩衝區。 WSK 應用程式必須立即或合理地將這些資料緩衝區釋放回 WSK 子系統,如此一來,WSK 子系統就不會用盡記憶體資源。 因此,WSK 應用程式可能需要將資料從 WSK 子系統所擁有的資料緩衝區複製到它自己的資料緩衝區。

注意 上述清單不一定詳盡。 選擇哪一種方法是特定 WSK 應用程式的最佳選擇時,可能會考慮其他幾點。