Win32 API 日本語リファレンス
ホーム › Networking.WinSock › LPWSPSHUTDOWN

LPWSPSHUTDOWN

コールバック

シグネチャ

INT LPWSPSHUTDOWN(
    SOCKET s,
    INT how,
    INT* lpErrno
);

パラメーター

フィールド型説明
sSOCKETソケットを識別する記述子。
howINTどの種類の操作が以降許可されなくなるかを示すフラグ。
lpErrnoINT*エラーコードへのポインター。

公式ドキュメント

LPWSPShutdown 関数は、ソケットでの送信と受信のいずれか、または両方を無効にします。

戻り値

エラーが発生しない場合、LPWSPShutdown はゼロを返します。それ以外の場合は SOCKET_ERROR が返され、具体的なエラーコードは lpErrno から取得できます。

エラーコード 意味
WSAENETDOWN
ネットワークサブシステムで障害が発生しました。
WSAEINVAL
how が有効でないか、ソケットの種類と整合していません。たとえば、UNI_RECV のソケットの種類に対して SD_SEND が使用されています。
WSAEINPROGRESS
コールバックの処理中にこの関数が呼び出されました。
WSAENOTCONN
ソケットが接続されていません (コネクション型のソケットのみ)。
WSAENOTSOCK
記述子がソケットではありません。

解説(Remarks)

LPWSPShutdown 関数は、すべての種類のソケットで使用され、受信、送信、またはその両方を無効にします。

how が SD_RECEIVE の場合、以降そのソケットでの受信は許可されません。これは下位のプロトコル層には影響しません。TCP ソケットの場合、受信待ちのデータがソケットのキューに残っているとき、または以降にデータが到着したときは、そのデータをユーザーに引き渡せないため接続がリセットされます。UDP ソケットの場合、到着したデータグラムは受け付けられ、キューに格納されます。いずれの場合も ICMP エラーパケットは生成されません。

how が SD_SEND の場合、以降そのソケットでの送信は許可されません。TCP ソケットの場合は FIN が送信されます。how に SD_BOTH を設定すると、上記のとおり送信と受信の両方が無効になります。

LPWSPShutdown はソケットを閉じない点に注意してください。ソケットに関連付けられたリソースは、LPWSPCloseSocket が呼び出されるまで解放されません。

メモ

LPWSPShutdown 関数は、ソケットの SO_LINGER 設定にかかわらずブロックしません。Windows Sockets SPI クライアントは、シャットダウンしたソケットを再利用できることを前提にしてはいけません。特に、Windows Sockets サービスプロバイダーは、そのようなソケットに対する LPWSPConnect の使用をサポートする必要はありません。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)