BIND(2)

名前
bind - ソケットに名前をつける

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

int bind(int sockfd, struct sockaddr *my_addr, int addrlen);

説明
bind はソケット sockfd にアドレス my_addr を与える。 my_addr は addrlen バイトの長さである。 伝統的にこれは 「ソケットに名前をつける」 と呼ばれる。 ( socket(2) でソケットが作成されたとき、 ソケットは名前空間(アドレス・ファミリー)に存在するが、 名前はつけられていない)。

注意
UNIX ドメインで名前をつけるとファイル・システム上に ソケットが作成される。 これはソケットが必要なくなったとき、呼出しプロセスが unlink(2) を使って削除する必要がある。 名前づけに関する規則は通信ドメイン間で異なる。 詳細な情報は第 4 章のマニュアルを参照すること。

返り値
成功するとゼロを返す。 失敗すると -1 を返し、 errno に適切な値を設定する。

エラー

EBADF
    sockfd が不正なディスクリプターである。

EINVAL
    ソケットがすでにアドレスに結びつけ(bind)られている。 これは将来変更されるかもしれない。 詳しくは linux/unix/sock.c を参照すること。

EACCES
    そのアドレスは保護されていて、かつユーザーがスーパー・ユーザーでない。 ENOTSOCK 引き数のディスクリプターはファイルに対するもので、ソケットでない。

以下のエラーは UNIXドメイン(AF_UNIX)のソケット特有である:

EINVAL
    addr_len が不正であるか、ソケットが AF_UNIX ファミリーでない。

EROFS
    ソケット inode が読み込み専用のファイルシステム上にある。

EFAULT
    my_addr がアクセス可能なアドレス空間外を指している。

ENAMETOOLONG
    my_addr が長過ぎる。

ENOENT
    ファイルが存在しない。

ENOMEM
    カーネルに利用可能なメモリーが十分にない。

ENOTDIR
    パス名の構成要素がディレクトリではない。

EACCES
    パス名の構成要素に検索許可(search permission)がない。

ELOOP
    my_addr を解決する際に遭遇したシンボリック・リンクが多過ぎる。

準拠
SVr4, 4.4BSD bind 関数はは BSD 4.2 で最初に現われた)。 SVr4 には他に EADDRNOTAVAIL, EADDRINUSE, ENOSR の一般のエラー状態、 及び EIO, EISDIR, EROFS の Unix ドメインのエラー状態についての記述 がある。

関連項目
accept(2), connect(2), listen(2), socket(2), getsockname(2)