3 通信の手続き

3.1 システムコール

通信の様々な処理は,OS;諸君の学習環境ではlinuxの仕事である.OSにその処理を任せる ことにより,通信のプログラムは格段に簡単になる.なぜならば,コンピューター間で通 信を行うためには,かなり煩雑な処理が必要で,それをいちいちプログラム中に記述する と,とてもプログラムが長くなる.OSに一括して処理をお願いするのである.

このOSに処理を依頼する命令をシステムコールと呼ぶ.システムコールは普通 の関数と似ており,ほとんど区別できない.しかし,「man socket2とすると,

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から通常の関数と分かる.

3.2 通信方法

インターネットを使った通信では,普通,クライアントプログラムとサーバープログラム のプログラムの2つのプログラムを実行させる.ここでの例では,データを送る方をクラ イアント,受け取り表示する方をサーバーとしている.大体は,接続を待っている方がサー バーで,接続要求をする方がクライアントとなる.

ここでの例のクライアントとサーバーの通信の手続きをまとめると,図のようにな る.大体,インターネットを使ったプログラムは,これと似たような手続きを行う.

それでは,これから通信手続きの具体的な内容を見よう.

3.2.1 ソケット作製

ソケットは,通信のための端点(endpoint)のことである.

socket()システムコールを使うことによりソケットを作製できる.このシステムコー ルの戻り値と引数は,


 		ファイルディスクリプター(整数値)=socket(domain, type, protocol)

となっている.

戻り値は,ファイルディスクリプターと呼ばれる整数値である.この整数 値により,複数のソケットを区別している.ソケットどころか,入出力はすべてこのファ イルディスクリプターで区別している.

引数のdomainでは,通信のプロトコルファミリーを指定する.プロトコルとは通信規約の ことである.通常のインターネットの通信であれば,PF_INETを指定する.

第2引数のtypeは,通信方式をを決める.次に示す2通りの指定ができる.

SOCK_STREAM    信頼性の確保された通信が必要なとき. SOCK_DGRAM    信頼性は無いが,リアルタイムのデータを送るのに適している.

第3引数のprotcolには,0を指定する.すると,TCPかUDPの適した方が選択される.

3.2.2 その他のシステムコール

その他のシステムコールの内容は課題とする.




ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年12月11日


no counter