このOSに処理を依頼する命令をシステムコールと呼ぶ.システムコールは普通 の関数と似ており,ほとんど区別できない.しかし,「man socket」2とすると,
SOCKET(2) Linux Programmer’s Manual SOCKET(2) 名前 socket - 通信のための端点(endpoint)を作成する 書式 #include <sys/types.h> #include <sys/socket.h> 後は長いので省略と表示され,最初の行はSOCKET(2)となっており,この2からシステムコールと分か る.一方,普通の関数の場合,「sin」とすると,
SIN(3) Linux Programmer’s Manual SIN(3) 名前 sin, sinf, sinl - 正弦 (サイン) 関数 書式 #include <math.h> double sin(double x); float sinf(float x); long double sinl(long double x); -lm でリンクする。 後は長いので省略と表示され,最初の行はsin(3)となっており,この3から通常の関数と分かる.
ここでの例のクライアントとサーバーの通信の手続きをまとめると,図のようにな る.大体,インターネットを使ったプログラムは,これと似たような手続きを行う.
それでは,これから通信手続きの具体的な内容を見よう.
socket()システムコールを使うことによりソケットを作製できる.このシステムコー ルの戻り値と引数は,
ファイルディスクリプター(整数値)=socket(domain, type, protocol)となっている.
戻り値は,ファイルディスクリプターと呼ばれる整数値である.この整数 値により,複数のソケットを区別している.ソケットどころか,入出力はすべてこのファ イルディスクリプターで区別している.
引数のdomainでは,通信のプロトコルファミリーを指定する.プロトコルとは通信規約の ことである.通常のインターネットの通信であれば,PF_INETを指定する.
第2引数のtypeは,通信方式をを決める.次に示す2通りの指定ができる.
SOCK_STREAM 信頼性の確保された通信が必要なとき. SOCK_DGRAM 信頼性は無いが,リアルタイムのデータを送るのに適している.
第3引数のprotcolには,0を指定する.すると,TCPかUDPの適した方が選択される.