スポンサーリンク

BINDRESVPORT(3) FreeBSD ライブラリ関数マニュアル BINDRESVPORT(3)

名称

bindresvport, bindresvport_sa − 特権 IP ポートにソケットをバインドする

書式

#include <rpc/rpc.h>

int

bindresvport(int sd, struct sockaddr_in *sin);

int

bindresvport_sa(int sd, struct sockaddr *sa);

解説

bindresvportbindresvport_sa は、ソケット記述子を、特権 IP ポート、す なわち範囲 0 〜 1023 のポートに結合するために使用されます。

root だけが特権ポートに結合できます。この呼び出しは他のユーザについては処 理失敗します。

sin がヌルポインタでない場合、 sin->sin_familysd によって渡されるソ ケットのアドレスファミリで初期化する必要があります。 sin->sin_port の値が 0 でない場合、 bindresvport() は、指定したポートを使用しようとします。そ れに失敗すると、別の特権付きポートを自動的に選択します。

sin にヌルポインタを渡すことは正当です。この場合、呼び出し側は bindresvport() が拾ったポート番号を得ることができません。

bindresvport() の関数プロトタイプは、 AF_INET ソケットに特化しています。 bindresvport_sa() は、より中立的な関数プロトタイプを持ちますが、正確に同 じように動作します。両方の関数とも正確に同じ挙動を示すことと、両方とも AF_INET ソケットと同様に、 AF_INET6 ソケットをサポートすることに注意して ください。

戻り値

bindresvport() と bindresvport_sa() は、処理が成功したら値 0 を返します。 そうでない場合は −1 が返され、エラーを示すために errno が設定されます。

エラー

bindresvport() と bindresvport_sa() 関数は次の場合に失敗します。

       [EBADF]

sd が有効な記述子ではありません。

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

[EADDRNOTAVAIL]
指定されたアドレスはこのローカルマシンから利用可能では ありません。

[EADDRINUSE]
指定されたアドレスはすでに使用中です。

[EINVAL]
ソケットはすでにあるアドレスにバインドされています、ま たは、ソケットファミリと指定されたアドレスのファミリと が一致しません。

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

[EFAULT]
name
パラメータは、ユーザアドレス空間の正当な部分に存 在しません。

[ENOBUFS]
システムには、この操作を実行するために十分な資源があり ません。

[EPFNOSUPPORT]
システムにプロトコルファミリが設定されていないか、プロ トコルファミリに対する実装が存在しないか、引数の間でア ドレスファミリが一致しません。

関連項目

bind(2), socket(2), rresvport(3), rresvport_af(3)

FreeBSD 10.0 January 27, 2000 FreeBSD 10.0

スポンサーリンク