PFN_WSK_CLOSE_SOCKET回呼函式 (wsk.h)

WskCloseSocket 函式會關閉套接字,並釋放任何相關聯的資源。

語法

PFN_WSK_CLOSE_SOCKET PfnWskCloseSocket;

NTSTATUS PfnWskCloseSocket(
  [in]      PWSK_SOCKET Socket,
  [in, out] PIRP Irp
)
{...}

參數

[in] Socket

WSK_SOCKET 結構的指標,指定要關閉之套接字的套接字物件。

[in, out] Irp

WSK 子系統用來以異步方式完成關閉作業的呼叫端配置 IRP 指標。 如需搭配 WSK 函式使用 IRP 的詳細資訊,請參閱 搭配 Winsock 核心函式使用 IRP

傳回值

WskCloseSocket 會傳回下列其中一個 NTSTATUS 代碼:

傳回碼 Description
STATUS_SUCCESS
已成功關閉套接字。 IRP 將會以成功狀態完成。
STATUS_PENDING
WSK 子系統無法立即關閉套接字。 WSK 子系統會在關閉套接字之後完成 IRP。 關閉作業的狀態將會在 IRP 的 [IoStatus.Status ] 字段中傳回。
其他狀態代碼
發生錯誤。 IRP 將會以失敗狀態完成。

備註

在呼叫 WskCloseSocket 函式之前,WSK 應用程式必須確定沒有任何其他函式呼叫正在進行到任何套接字的函式,包括任何擴充功能函式的任何應用程式的其他線程中。 例如,當應用程式在另一個線程的相同套接字上呼叫 WskSend 時,WSK 應用程式不得在一個線程的套接字上呼叫 WskCloseSocket 對套接字函式的任何進行中呼叫都必須將控制權傳回 WSK 應用程式,才能呼叫 WskCloseSocket 以關閉套接字。 不過,如果先前呼叫尚未完成套接字函式的暫止 IRP,WSK 應用程式可以呼叫 WskCloseSocket

呼叫 WskCloseSocket 函式會導致 WSK 子系統從套接字的函式呼叫之前取消並完成所有擱置的 IRP。 WSK 子系統也可確保任何進行中的事件回呼函式在關閉套接字之前,都會將控制權傳回 WSK 子系統。

在 WSK 應用程式呼叫 WskCloseSocket 之後,它不應該對任何套接字的函式進行進一步呼叫。

如果 WSK 應用程式將安全性描述項套用至套接字,則套接字關閉時,不會釋放呼叫 WskSocket、WskSocketConnect 或 WskControlSocket 中所指定之安全描述元的快取複本。 當不再需要安全性描述元時,WSK 應用程式必須使用 WSK_RELEASE_SD 用戶端控制作業來釋放安全性描述元的快取複本。

WSK 子系統會解除分配套接字套接字對象的記憶體, WSK_SOCKET,這是在建立套接字時由 WSK 子系統所配置。

針對連線導向套接字,除非套接字已在雙向完全中斷, 否則 WskCloseSocket 函式一律會執行套接字的中止中斷連線。 若要正常中斷連線導向套接字與遠端傳輸地址的連線,WSK 應用程式應該呼叫 WskDisconnect 函式。

規格需求

需求
最低支援的用戶端 可在 Windows Vista 和更新版本的 Windows 作業系統中使用。
目標平台 Universal
標頭 wsk.h (包含 Wsk.h)
IRQL <= DISPATCH_LEVEL

另請參閱

WSK_PROVIDER_BASIC_DISPATCH

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_PROVIDER_LISTEN_DISPATCH

WSK_SOCKET

WskControlSocket

WskDisconnect

WskSocket

WskSocketConnect