2 ソケットとは?
"ソケット" という言葉をよく耳にしますが、そもそも "ソケット" とは何なのでしょうか?それは、標準的な Unix のファイル記述子を使って他のプログラムと会話するための方法です。
なんと?
Ok--- Unix のハッカーが "Unix では何でもファイルなんだ!" と言ったのを聞いたことがあるかもしれません。その人が言っているのは、Unix のプログラムが何らかの I/O を行うとき、ファイル記述子に対して読み書きを行うという事実のことかもしれません。ファイル記述子は、単純に、開いているファイルに関連する整数です。しかし、このファイルは、ネットワーク接続、FIFO、パイプ、ターミナル、ディスク上のファイルなど、あらゆるものになり得ます(ここが重要)。Unix ではすべてがファイルなのです!だから、インターネット上で他のプログラムと通信したいときは、ファイル記述子を介して行うことになるんだ。と思ってください。
"ネットワーク通信のためのファイル記述子はどこで手に入るのですか、お利口さん?" というのが、今あなたが考えている最後の質問でしょうが、とにかくそれに答えてあげましょう。あなたは socket()
システムルーチンを呼び出すのです。このルーチンはソケット記述子を返すので、それを使って send()
と recv()
(man send
, man recv
)という特別なソケットコールを使って通信を行います。
"でもね!" あなたは今頃、そう叫んでいるかもしれません。" ファイル記述子なら、どうしてネプチューンの名において、通常の read()
と write()
の呼び出しでソケットを通して通信できないんだ?" と。短い答えは、"できる!" です。もっと長い答えは、"できるけど、send()
と recv()
はデータ転送をより大きく制御できる" です。
次は何?どうでしょう、ソケットにはいろいろな種類がありますね。DARPA インターネットアドレス(インターネットソケット)、ローカルノード上のパス名(Unix ソケット)、CCITT X.25 アドレス(X.25 ソケット、無視しても大丈夫)、そしておそらくあなたが実行する Unix のフレーバーに応じて他の多くの種類があります。この文書では、最初の "インターネットソケット" のみを扱います。