C言語-ソケットプログラミング



ソケットプログラミング概要

ソケットとは、アプリケーションがデータを送受信するための仕組みを抽象化したものです。

ソケットを使用することでネットワークプログラムの通信処理を容易にすることができます。


ソケットの作成と破棄

アプリケーションプログラムがTCP/UDPを使用してネットワーク通信を行う場合には、ソケットの作成をOSに依頼します。

socket()関数により「ソケットディスクリプタ」を生成し、ソケットAPIで処理されるソケット識別子として使用します。

詳細はC言語-socket関数を参照下さい。


アドレスの指定

ソケットを使用するアプリケーションでは、IPアドレスとポート番号をOSカーネルに知らせる必要があります。

ソケットAPIではソケットに関連付けしたアドレスを指定するために、「sockaddr」という汎用のデータ型が定義されています。

プロトコルごとにsockaddrデータ型にキャストできるデータ構造を再定義することで、ソケットの汎用性を持たせています。

例えば、TCP/IPソケットアドレスでは「sockaddr_in」構造体を利用しますが、これはsockaddr構造体をTCP/IPソケットアドレス用の形式に定義し直したものがとなります。

struct sockaddr {
    unsigned short sa_family; /* アドレスファミリー */
    char sa_data[14];         /* アドレス情報 */
};

アプリケーションプロトコル

アプリケーションプロトコルとは、アプリケーションプログラム間でのデータ送受信において、やり取りするデータ(メッセージ)の形式、エンコード、処理順序などといった独自定義した規約のことです。

ソケットはプログラム間でのデータ転送と受信のみを行うものであり、データの中身には関知せずにバイト列をそのまま転送します。

送信されてくるデータのメッセージフォーマットを規約化にすることで、受信側プログラムはデータを解析したり、内部的にフォーマット変換を行うなど可能になります。

受信側プログラムがメッセージ解析できるように、メッセージのフィールド間の区切りを特定できるように情報をフォーマットすることを「フレーミング」といいます。


ソケットオプション

getsockopt()とsetsockopt()でソケット動作を決める特性を調整することができます。

詳細は各システムのマニュアルを参照すること。


ソケットプログラミング


ソケット関連関数


関連ページ



スポンサード リンク