UNIX(4)

名称
unix - UNIX ドメインプロトコルファミリ

書式
#include <sys/types.h> #include <sys/un.h>

解説
UNIX ドメインプロトコルファミリは、通常の socket(2) メカニズムを用いる ローカルな (マシン上の) プロセス間通信を提供するプロトコル群です。 UNIX ドメインファミリは SOCK_STREAM および SOCK_DGRAM ソケットタイプをサポートし、 アドレッシングにファイルシステムのパス名を使います。

アドレッシング
UNIX ドメインのアドレスは、 最大 104 文字の可変長のファイルシステムパス名です。 インクルードファイル <sys/un.h> がこのアドレスを定義しています:

    struct sockaddr_un {
    u_char	sun_len;
    u_char	sun_family;
    char	sun_path[104];
    };

bind(2) で UNIX ドメインソケットに名前をバインドすることにより、 ファイルシステムにソケットファイルが作成されます。 このファイルはソケットがクローズされても削除されません。削除には unlink(2) を使わなければなりません。

UNIX ドメインプロトコルファミリは、ブロードキャストアドレッシングや 入力メッセージに対するどのような形態の “ワイルドカード” マッチングもサポート しません。全てのアドレスは他の UNIX ドメインソケットの絶対あるいは相対パス名です。 また、パス名を参照するときには、 通常のファイルシステムのアクセスコントロールが適用されます。 例えば connect(2) あるいは sendto(2) の終点は書き込み可能 でなければなりません。

プロトコル
UNIX ドメインプロトコルファミリは SOCK_STREAM および SOCK_DGRAM アブストラクション をサポートするシンプルなトランスポートプロトコルから成ります。 また、 SOCK_STREAM ソケットは、 sendmsg(2) および recvmsg(2) へ与える引数の中の msg_control フィールドの使用を通じて UNIX ファイル記述子の通信をサポートします。

任意の正当な記述子をメッセージ中に含めて送信可能です。 渡されるファイル記述子はインクルードファイル <sys/socket.h> で定義される struct cmsghdr を用いて記述されます。そのメッセージの タイプは SCM_RIGHTS であり、メッセージのデータ部は渡される ファイル記述子を表現する整数の配列です。 渡される記述子の数はメッセージの length フィールドで定義されています。 length フィールドはヘッダのサイズと ファイル記述子の配列のサイズの合計です。

受信された記述子は、 dup(2) の呼び出しによって生成されたかのような、 送信者の記述子の 複製 です。 fcntl(2) でセットされたプロセス毎の記述子フラグは、 受信者には 渡されません。 配送を待っている、あるいは意図的に受け取られない 記述子は、終点ソケットがクローズされたときに システムによって自動的にクローズされます。

関連項目
socket(2), intro(4) An Introductory 4.3 BSD Interprocess Communication Tutorial, PS1, 7. An Advanced 4.3 BSD Interprocess Communication Tutorial, PS1, 8.