次の方法で共有


Socket.Shutdown メソッド

Socket での送受信を無効にします。

Public Sub Shutdown( _
   ByVal how As SocketShutdown _)
[C#]
public void Shutdown(SocketShutdownhow);
[C++]
public: void Shutdown(SocketShutdownhow);
[JScript]
public function Shutdown(
   how : SocketShutdown);

パラメータ

  • how
    許可されなくなる操作を指定する SocketShutdown 値の 1 つ。

例外

例外の種類 条件
SocketException ソケットへのアクセスを試みているときにエラーが発生しました。詳細については「解説」を参照してください。
ObjectDisposedException Socket は閉じられています。

解説

コネクション指向の Socket を使用している場合は、 Socket を閉じる前に必ず Shutdown メソッドを呼び出します。これにより、閉じる前の接続ソケットですべてのデータが送受信されるようになります。

Close メソッドを呼び出して、 Socket に関連付けられたすべてのマネージ リソースとアンマネージ リソースを解放します。閉じた後は Socket の再利用はできません。

how パラメータに有効な SocketShutdown 列挙値を次の表に示します。

説明
Send この Socket での送信を無効にします。
Receive この Socket での受信を無効にします。
Both この Socket での送受信を無効にします。

howSend に設定すると、後続の Send への呼び出しの禁止が指定されます。コネクションレスの Socket を使用している場合は、 Send を指定しても無効です。

howReceive に設定すると、後続の Receive への呼び出しの禁止が指定されます。下位のプロトコル層には影響を与えません。コネクション指向のプロトコルを使用している場合は、 Shutdown を呼び出した後に次の条件のいずれかが存在すると、接続が終了します。

  • データが受信ネットワーク バッファにあり受信待ちである。
  • 他のデータが到達している。

コネクションレスのプロトコルを使用している場合、データグラムは受け入れられ、キューに置かれます。ただし、追加の受信データグラム用のバッファ領域がない場合は、そのデータグラムは破棄されます。このとき送信者側にはエラーが返されません。コネクションレスの SocketShutdown を使用することはお勧めできません。

howBoth に設定すると、上記のように送信および受信の両方が無効になります。

メモ    Shutdown メソッドを呼び出したときに SocketException が発生した場合は、 SocketException.ErrorCode を使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのマニュアルから、エラーの詳細情報を確認できます。これは MSDN から入手できます。

使用例

[Visual Basic, C#, C++] Shutdown を使用して Socket を無効にする例を次に示します。

 
aSocket.Shutdown(SocketShutdown.Both)
aSocket.Close()
If aSocket.Connected Then
    Console.WriteLine("Winsock error: " _
       + Convert.ToString(System.Runtime.InteropServices.Marshal.GetLastWin32Error()))
End If

[C#] 
aSocket.Shutdown(SocketShutdown.Both);
aSocket.Close();
if (aSocket.Connected) {
   Console.WriteLine("Winsock error: " + Convert.ToString(System.Runtime.InteropServices.Marshal.GetLastWin32Error()) );
}
   

[C++] 
aSocket->Shutdown(SocketShutdown::Both);
aSocket->Close();
if (aSocket->Connected) {
   Console::WriteLine(S"Winsock error: {0}", Convert::ToString(System::Runtime::InteropServices::Marshal::GetLastWin32Error()) );
}
   

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Socket クラス | Socket メンバ | System.Net.Sockets 名前空間 | Close | SocketShutdown