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 での送受信を無効にします。 |
how を Send に設定すると、後続の Send への呼び出しの禁止が指定されます。コネクションレスの Socket を使用している場合は、 Send を指定しても無効です。
how を Receive に設定すると、後続の Receive への呼び出しの禁止が指定されます。下位のプロトコル層には影響を与えません。コネクション指向のプロトコルを使用している場合は、 Shutdown を呼び出した後に次の条件のいずれかが存在すると、接続が終了します。
- データが受信ネットワーク バッファにあり受信待ちである。
- 他のデータが到達している。
コネクションレスのプロトコルを使用している場合、データグラムは受け入れられ、キューに置かれます。ただし、追加の受信データグラム用のバッファ領域がない場合は、そのデータグラムは破棄されます。このとき送信者側にはエラーが返されません。コネクションレスの Socket で Shutdown を使用することはお勧めできません。
how を Both に設定すると、上記のように送信および受信の両方が無効になります。
メモ 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