プログラミングインタフェース

ローカル名のバインド

ソケットは、その作成時には名前がありません。アドレスがソケットにバインドされるまで、リモートプロセスはソケットを参照できません。通信プロセスは、アドレスを介して接続されます。UNIX ファミリでは、接続は、通常 1 つまたは 2 つのパス名からなります。UNIX ファミリのソケットは、必ずしも名前にバインドされる必要はありません。バインドされると、local pathnameforeign pathname などの順序セットは重複して存在できません。パス名では、既存のファイルを参照できません。

bind(3SOCKET) 呼び出しを使用すると、プロセスはソケットのローカルアドレスを指定できます。これによって、local pathname 順序セットが作成され、一方、connect(3SOCKET) および accept(3SOCKET) はアドレスのリモート側を固定することによってソケットの関連付けを完了します。bind(3SOCKET) は次のように使用します。

bind (s, name, namelen);

s はソケットハンドルです。バインド名は、バイト文字列で、サポートするプロトコル (複数も可) がこれを解釈します。UNIX ファミリ名には、パス名とファミリが含まれます。例では、UNIX ファミリソケットに /tmp/foo という名前をバインドしています。

#include <sys/un.h>
 ...
struct sockaddr_un addr;
 ...
strcpy(addr.sun_path, "/tmp/foo");
addr.sun_family = AF_UNIX;
bind (s, (struct sockaddr *) &addr,
		strlen(addr.sun_path) + sizeof (addr.sun_family));

この例では、AF_UNIX ソケットアドレスの大きさを判断するときには NULL バイトがカウントされないので、strlen(3C) を使用しています。

addr.sun_path で参照されるファイル名は、システムファイルの名前空間でソケットとして作成されます。呼び出し側は、addr.sun_path が作成されるディレクトリに書き込み許可を持っている必要があります。このファイルは、不要になったときに呼び出し側が削除してください。AF_UNIX ソケットを削除するには、unlink(1M) を使用します。