ソケットはプロセス間通信 (Inter Process Communication: IPC) の一種で、ネットワークで接続された異なる計算機上のプロセスと通信できることが特徴です。ソケットはストリーム型データグラム型の2種類に分けられます。

ストリームソケット (コネクション型、TCP/IP)

SOCK_STREAM型を指定したソケットを利用する、ストリーム指向のクライアント/サーバー通信は、データグラム指向の通信よりもやや複雑です。複雑ではありますが、信頼性の高い通信経路を提供します。

SOCK_STREAM型ソケットを使用した、クライアント/サーバー処理の流れを次に示します。

SOCK_STREAM

socket() 関数は、ソケット(socket)と呼ばれる通信の端点を作り出します。

bind() でソケットに名称を付与します。

listen() でクライアントからの接続要求を受け付けます。

accept() でクライアントからの接続要求を待ち合わせます。接続要求を受信すると、新規ソケットを生成します。

connect() でサーバーに接続します。

指定ホストと通信可能で、指定ポート番号のソケットが開いていない場合、 connect()ECONNREFUSED でエラー終了します。

ホストと通信できない場合、一定の時間経過後に connect() はETIMEOUTでエラー終了します。Solarisの場合、タイムアウト時間は ndd コマンドで確認することができます。

$ ndd /dev/tcp tcp_ip_abort_cinterval
180000

値はミリ秒単位です。

send() または write() でデータの送信、 recv() または read() でデータを受信します。

close() で接続を切断します。

データグラムソケット (コネクションレス型、UDP/IP)

SOCK_DGRAM型のソケットを使ったデータグラム指向のクライアント/サーバー通信は、ストリーム指向の通信より単純です。簡単ではありますが、信頼性は低いです。

サーバーは、クライアントからの接続を受容(accept)するために聴取(listen)を行う必要はなく、クライアントはサーバーに接続(connect)する必要がありません。

SOCK_DGRAM型ソケットを使用した、クライアント/サーバー処理の流れを次に示します。

SOCK_DGRAM
スポンサーリンク