PFN_WSK_DISCONNECT回呼函式 (wsk.h)
WskDisconnect 函式會中斷連線導向或數據流套接字與遠端傳輸地址的連線。
語法
PFN_WSK_DISCONNECT PfnWskDisconnect;
NTSTATUS PfnWskDisconnect(
[in] PWSK_SOCKET Socket,
[in, optional] PWSK_BUF Buffer,
[in] ULONG Flags,
[in, out] PIRP Irp
)
{...}
參數
[in] Socket
WSK_SOCKET 結構的指標,指定中斷連線之套接字的套接字物件。
[in, optional] Buffer
WSK_BUF 結構的指標。 此結構描述數據緩衝區,其中包含 WSK 子系統在套接字中斷連線之前要傳輸至遠端傳輸地址的數據。 如果沒有這類資料要傳輸,WSK 應用程式會將此指標設定為 NULL。 如果在 Flags 參數中指定 WSK_FLAG_ABORTIVE,Buffer 參數必須是 NULL。
[in] Flags
包含下列旗標或零的 ULONG 值:
WSK_FLAG_ABORTIVE
指示 WSK 子系統執行套接字的中止中斷連線。 如果 WSK 應用程式未指定此旗標,WSK 子系統將會執行套接字的正常中斷連線。
[in, out] Irp
WSK 子系統用來異步完成中斷連線作業的呼叫端配置 IRP 指標。 如需搭配 WSK 函式使用 IRP 的詳細資訊,請參閱 搭配 Winsock 核心函式使用 IRP。
傳回值
WskDisconnect 會傳回下列其中一個 NTSTATUS 代碼:
傳回碼 | Description |
---|---|
|
套接字已成功與遠端傳輸位址中斷連線。 IRP 將會以成功狀態完成。 |
|
WSK 子系統無法立即中斷套接字連線。 WSK 子系統在中斷套接字與遠端傳輸地址的連線之後,將會完成 IRP。 中斷聯機作業的狀態將會在 IRP 的 [IoStatus.Status ] 欄位中傳回。 |
|
套接字已不再運作。 IRP 將會以失敗狀態完成。 WSK 應用程式必須呼叫 WskCloseSocket 函式,才能儘快關閉套接字。 |
|
發生錯誤。 IRP 將會以失敗狀態完成。 |
備註
WSK 應用程式只能在連線導向或數據流套接字上呼叫 WskDisconnect 函式,該函式之前已連線到遠端傳輸位址,或在接聽套接字上接受的套接字上。
WskDisconnect 會導致 WSK 子系統透過任何適合基礎傳輸的方式通知遠端傳輸位址,讓連線中斷連線。 如果 Buffer 參數為非 NULL,WSK 子系統會在中斷套接字連線之前,先將緩衝區中的數據傳送至遠端傳輸位址。
如果執行正常中斷連線,WSK 子系統會等到所有未完成的傳輸數據都已傳送,再中斷套接字連線。 套接字中斷連線之後,WSK 應用程式就無法將任何其他數據傳送至遠端傳輸位址。 不過,WSK 應用程式仍然可以從遠端傳輸位址接收其他數據,直到遠端應用程式中斷其套接字結尾的連線為止。
請注意,並非所有傳輸都支援半開啟的連線。 如果傳輸不支援半開啟的連線,則執行正常中斷連線之後,WSK 應用程式將不會接收來自遠端傳輸位址的任何其他數據。
透過正常中斷連線,只有在傳輸通訊協定完全完成中斷連線作業時,才會完成 IRP。 對於某些傳輸通訊協定,如果傳送數據到遠端傳輸位址時發生問題,IRP 可能無法完成。 在此情況下,WSK 應用程式可以再次呼叫 WskDisconnect 函式並指定WSK_FLAG_ABORTIVE旗標,或藉由呼叫 WskCloseSocket 函式來復原。 不論是哪一種情況,WSK 子系統都會中止中斷套接字的連線,並強制完成擱置的 IRP。
如果執行中止的中斷連線,WSK 子系統會取消所有進行中和擱置中的傳輸作業,而且不會等待中斷套接字的連線。 中止中斷連線之後,WSK 應用程式就無法將任何其他數據傳送至遠端傳輸位址,或從遠端傳輸位址接收任何其他數據。
WSK 應用程式可以藉由呼叫 WskCloseSocket 函式完全關閉連線。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 可在 Windows Vista 和更新版本的 Windows 作業系統中使用。 |
目標平台 | Universal |
標頭 | wsk.h (包含 Wsk.h) |
IRQL | <= DISPATCH_LEVEL |