ソケット:閉じるvs。シャットダウン
1. 序章
この記事では、各操作がどのように機能するかを理解しながら、シャットダウンとクローズの違いを見ていきます。
2. ソケットの簡単なレビュー
ソケットは、プロセス間の通信を提供するように調整されたネットワーキングソフトウェアです。 現在、コアネットワークは主にTCP/IPモデルを介して構築されています。 このコンテキストでは、ソケットは通常と呼ばれますネットワークソケットまたはインターネットソケット。ソケットを介して通信するプロセスは、同じマシン(ローカルシステム)または異なるマシン(分散システム)で実行できることを強調します。
- データグラム:を使用するソケットユーザーデータグラムプロトコル(UDP)接続なしでプロセスを通信します。このように、データグラムソケットは、プロセス間メッセージ交換の信頼性も順序も保証しません。
- ストリーム:を採用したソケット伝送制御プロトコル(TCP)は、コネクション型通信を可能にします。したがって、ストリームソケットは、異なるプロセス間で交換するシーケンシャルでエラーのないメッセージを提供します。
- Raw:トランスポート層プロトコルに関係なくIPパケットを直接受信するソケット。通常、rawソケットから読み取ると、ヘッダーが明示されたパケットが返されます。 同様に、rawソケットは、それらを適切に送信するために明示的なヘッダーを持つパケットを必要とします
3. 動作中のソケット
実際には、ソケットを開くということは、全二重のプロセス間通信を可能にするファイル記述子を作成することを意味すると言えます。 したがって、ソケットを介して通信するプロセスは、ファイル記述子を読み取ってパケットを受信します。 同様に、これらのプロセスはファイル記述子を書き込んでパケットを送信します。
ある時点で、プロセス間の通信が終了する可能性があることに注意してください。
この通信を終了するには、シャットダウンとクローズの2つの操作を使用できます。 ただし、これらの操作は、さまざまな結果を達成するために特定の方法で使用できます。 次に、これらの各操作の特殊性について学習します。
4. シャットダウン
シャットダウン操作は、ソケットを破壊せずにソケットの通信をブロックする方法を表します。 ただし、ソケットシャットダウンを呼び出す以外に、この操作がどのように機能するかを定義する必要があります。 そのために、次の3つの実行モードを使用できます。
SHUT_RDモードは、ソケットがそれ以上メッセージを受信するのをブロックします。したがって、ソケットのバッファーに含まれる保留中のデータ(すなわち、配信されません)は、それを使用するプロセスによって引き続き読み取り可能です。 ただし、保留中のデータを読み取った後、ソケットを再度読み取ろうとすると、サイズがゼロのメッセージのみが返されます。 最後に、シャットダウンSHUT_RD操作の実行がソケットの送信機能を無効にしないことを強調します
SHUT_WRモードは、ソケットがメッセージを送信するのを防ぎます。通常、ソケットは、シャットダウンSHUT_WR操作の前に行われたメッセージを送信するためのすべての保留中の要求を完了します。 さらに、シャットダウンSHUT_WR実行の一部として、ソケットは接続されたクライアント(存在する場合)にメッセージの送信が一時停止されていることを通知します。 最後に、シャットダウンSHUT_WR操作は、メッセージを受信するためのソケットをブロックしません
SHUT_RDWRモードは、ソケットがメッセージを送信および受信することをブロックします。他のシャットダウンモードと同様に、シャットダウンSHUT_RDWR操作はソケットを破壊しません。 したがって、たとえば、ストリームソケットの接続は終了しません。 ただし、送受信操作に関連するメッセージは宛先に到達しません。 この動作モードは、SHUT_RDとSHUT_WRの両方のシャットダウン動作を順番に実行するのと同等の結果になります。
次の画像は、実行モードに応じたシャットダウン操作の動作をまとめたものです。
5. 近い
close操作は、ソケットの通信をブロックして破棄します。つまり、ソケットを閉じると、接続が終了し(存在する場合)、メッセージ交換を可能にするファイル記述子が閉じられます。 このように、クローズ操作を実行した後、プロセスはソケットの読み取りも書き込みもできません。 したがって、閉じたソケットで操作しようとすると、プロセスに例外が発生します。
6. 結論
この記事では、ソケットの主な概念を確認し、それらの動作を思い出しました。 次に、ソケットに適用されるシャットダウンおよびクローズ操作について検討しました。
同様の特性を持っていても、シャットダウン操作を実行してもソケットは破壊されないと結論付けることができます。 代わりに、動作モードに応じて通信容量を制限するだけです。 次に、閉じる操作を実行すると、ソケット(存在する場合)の接続が終了し、ファイル記述子も閉じて、最終的にソケットが破棄されます。