スポンサーリンク

BIND(2) FreeBSD システムコールマニュアル BIND(2)

名称

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

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <sys/types.h>
#include <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() は、処理が成功すると値 0 を返します。そうでない場合、値 -1 が 返され、グローバル変数 errno が設定されてエラーを示します。

エラー

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 で登場しました。

FreeBSD 10.0 June 4, 1993 FreeBSD 10.0

スポンサーリンク