BIND(2) | FreeBSD System Calls Manual | BIND(2) |
名称
bind — ローカルプロトコルアドレスをソケットに割り当てるライブラリ
Standard C Library (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 で埋めるべきです。
戻り値
The bind() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.エラー
bind() システムコールは、次の場合に失敗します:- [ EAGAIN]
- 要求を満たすためのカーネルリソースが一時的に利用できません。
- [ EBADF]
- s 引数が有効な記述子ではありません。
- [ EINVAL]
- ソケットが、既にアドレスにバインドされ、プロトコルが、新しいアドレスへのバインドをサポートしていません。または、ソケットが、シャットダウンされています。
- [ ENOTSOCK]
- s 引数がソケットではありません。
- [ EADDRNOTAVAIL]
- 指定のアドレスがローカルマシンから利用できません。
- [ EADDRINUSE]
- 指定のアドレスは、既に使用中です。
- [ EAFNOSUPPORT]
- 指定されたアドレスファミリのアドレスを、このソケットで使用することができません。
- [ EACCES]
- 要求されたアドレスは、保護されており、現在のユーザが持っているパーミッションは、それにアクセスするのには不適切です。
- [ EFAULT]
- addr 引数が有効なユーザアドレス空間ではありません。
次のエラーは、UNIX ドメイン内のバインドアドレスに固有のものです。
- [ ENOTDIR]
- パスの構成要素中にディレクトリ以外のものが含まれています。
- [ ENAMETOOLONG]
- パス名の構成要素が 255 文字を越えているか、またはパス名全体が 1023 文字を越えています。
- [ ENOENT]
- パス名の接頭辞構成要素が存在しません。
- [ ELOOP]
- パス名を変換するときに検出されたシンボリックリンクが多すぎます。
- [ EIO]
- ディレクトリエントリを作成している間、または inode を割り振りしている間に入出力エラーが発生しました。
- [ EROFS]
- 指定されたファイルは、読み込み専用ファイルシステム上にあります。
- [ EISDIR]
- 空のパス名が指定されました。
歴史
bind() システムコールは、 4.2BSD で登場しました。June 4, 1993 | FreeBSD |