BIND(2)

名称
bind - ローカルプロトコルアドレスをソケットに割り当てる

ライブラリ
libc

書式
<sys/types.h> <sys/socket.h> int bind(int s, const struct sockaddr *addr, socklen_t addrlen)

解説
bind() 関数は、ローカルプロトコルアドレスをソケットに割り当てます。 ソケットは、 socket(2) で作成される時にアドレスファミリ空間に存在しますが、 プロトコルアドレスは割り当てられていません。 bind() 関数はソケットに addr を割り当てることを要求します。

注
UNIX ドメイン内でのアドレスのバインドによってファイルシステム内に ソケットが作成されます。 これは、必要なくなったときに呼び出し側が (unlink(2) を使用して) 削除する必要があります。

アドレスのバインドで使用される規則は通信ドメイン間で異なります。 詳細については、 セクション 4 のマニュアルエントリを参照してください。

移植性を最大にするためには、ソケット構造体は、使用前 つまりこれを bind() に渡す前に、0 で埋めるべきです。

戻り値

エラー
bind() 呼び出しは次の場合に失敗します:

[EAGAIN]
    要求を満たすためのカーネルリソースが一時的に利用できません。

[EBADF]
    s が有効な記述子ではありません。

[ENOTSOCK]
    s がソケットではありません。

[EADDRNOTAVAIL]
    指定のアドレスがローカルマシンから利用できません。

[EADDRINUSE]
    指定のアドレスは既に使用中です。

[EACCES]
    要求されたアドレスは保護されており、現在のユーザが持っているパーミッションは それにアクセスするのには不適切です。

[EFAULT]
    addr パラメータが有効なユーザアドレス空間ではありません。

次のエラーは UNIX ドメイン内のバインドアドレスに固有のものです。

[ENOTDIR]
    パスの構成要素中にディレクトリ以外のものが含まれています。

[ENAMETOOLONG]
    パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。

[ENOENT]
    パス名の接頭辞構成要素が存在しません。

[ELOOP]
    パス名を変換するときに検出されたシンボリックリンクが多すぎます。

[EIO]
    ディレクトリエントリを作成している間、または inode を割り振りしている間に 入出力エラーが発生しました。

[EROFS]
    指定されたファイルは読取り専用ファイルシステム上にあります。

[EISDIR]
    空のパス名が指定されました。

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

歴史
bind() 関数は 4.2BSD で登場しました。