LPWSPCLEANUP コールバック関数 (ws2spi.h)
LPWSPCleanup 関数は、Windows ソケット サービス プロバイダーの使用を終了します。
構文
LPWSPCLEANUP Lpwspcleanup;
int Lpwspcleanup(
[out] LPINT lpErrno
)
{...}
パラメーター
[out] lpErrno
エラー コードへのポインター。
戻り値
操作が正常に開始された場合、戻り値は 0 です。 それ以外の場合は、SOCKET_ERROR値が返され、 lpErrno で特定のエラー番号を使用できます。
エラー コード | 意味 |
---|---|
この関数を使用する前に 、**WSPStartup** 呼び出しが成功する必要があります。 | |
ネットワーク サブシステムが失敗しました。 | |
ネームスペース プロバイダーに指定されたプロバイダー識別子は、ネームスペース プロバイダーによって管理されません。 |
解説
Winsock サービス プロバイダーを使用する前に 、WSPStartup 呼び出しを正常に実行するには、Windows Sockets 2 SPI クライアントが必要です。 Winsock サービス プロバイダーの使用が完了すると、SPI クライアントは LPWSPCleanup を呼び出して Winsock サービス プロバイダーから登録を解除し、サービス プロバイダーが Windows Sockets 2 クライアントに代わって割り当てられたリソースを解放できるようにします。 SPI クライアントは、複数の WSPStartup 呼び出しを行うことができます。 WSPStartup 呼び出しごとに、対応する LPWSPCleanup 呼び出しも発行されます。 サービス プロバイダーの最終的な LPWSPCleanup のみが実際のクリーンアップを行います。上記の 呼び出しでは、Winsock サービス プロバイダーの内部参照カウントをデクリメントするだけです。
内部参照カウントが 0 に達し、実際のクリーンアップ操作が開始されると、このプロセスのスレッドによって発行された保留中のブロック呼び出しまたは非同期呼び出しは、通知メッセージを投稿したり、イベント オブジェクトに通知したりせずに取り消されます。 このプロセスのスレッドによって発行された保留中の重複する送受信操作 (LPWSPSend、 LPWSPSendTo、 LPWSPRecv、 LPWSPRecvFrom と重複するソケット) も、イベント オブジェクトを設定したり、完了ルーチンを呼び出したりせずに取り消されます (指定されている場合)。 この場合、保留中の重複した操作はエラー状態WSA_OPERATION_ABORTEDで失敗します。 LPWSPCleanup が呼び出されたときに開かれたソケットはすべてリセットされ、LPWSPCloseSocket が呼び出されたかのように自動的に割り当てが解除されます。LPWSPCloseSocket で閉じられているが、まだ送信される保留中のデータがあるソケットは影響を受けませんが、保留中のデータは引き続き送信されます。
この関数は、サービス プロバイダー DLL がメモリからアンロードされる準備が整うまで、 を返さないでください。 特に、送信される残りのデータは、既に送信されているか、サービス プロバイダーの DLL と共にメモリからアンロードされないトランスポート スタックの一部によって送信するためにキューに登録されている必要があります。
Winsock サービス プロバイダーは、 LPWSPCleanup を呼び出さずに終了するプロセス (エラーの結果など) に対処する準備をしておく必要があります。 Winsock サービス プロバイダーは、 LPWSPCleanup が、Ws2_32.dll が すぐに WSPStartup を呼び出して Winsock の使用状況を再確立できる状態にしておく必要があります。
要件
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
Header | ws2spi.h |