共用方式為


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 程式代碼:

傳回碼 描述
STATUS_SUCCESS
套接字已成功與遠端傳輸位址中斷連線。 IRP 將會以成功狀態完成。
STATUS_PENDING
WSK 子系統無法立即中斷套接字的連線。 WSK 子系統在中斷套接字與遠端傳輸地址的連線之後,將會完成 IRP。 中斷連線作業的狀態將會在 IRP 的 [IoStatus.Status] 字段中傳回。
STATUS_FILE_FORCED_CLOSED
套接字已不再運作。 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作系統中使用。
目標平臺 普遍
標頭 wsk.h (包括 Wsk.h)
IRQL <= DISPATCH_LEVEL

另請參閱

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskConnect

WskDisconnectEvent

WskSocketConnect