名 前
bindresvport − ソ ケ ッ ト を 特 権 IP ポ ー ト に バ イ ン ド す る
書 式
#include
<sys/types.h>
#include <netinet/in.h>
int bindresvport(int sockfd, struct sockaddr_in *sin);
説 明
bindresvport() は 、 ソ ケ ッ ト デ ィ ス ク リ プ タ ー を 特 権 無 名 (privileged anonymous) IP ポ ー ト に バ イ ン ド す る の に 使 う 。 特 権 無 名 IP ポ ー ト と は 、 ポ ー ト 番 号 が 512 か ら 1023 の 範 囲 か ら 任 意 に 選 択 さ れ る ポ ー ト で あ る 。
bindresvport() に よ っ て 実 行 さ れ た bind(2) が 成 功 し 、 sin が NULL 以 外 の 場 合 、 実 際 に 割 り 当 て ら れ た ポ ー ト 番 号 が sin−>sin_port に 入 れ て 返 さ れ る 。
sin に は NULL を 指 定 す る こ と も で き 、 そ の 場 合 に は sin−>sin_family は 暗 黙 の う ち に AF_INET と み な さ れ る 。 し か し 、 こ の 場 合 に は 、 bindresvport() は 実 際 に 割 り 当 て ら れ た ポ ー ト 番 号 を 返 す 手 段 を 持 た な い (割 り 当 て ら れ た ポ ー ト 番 号 は 、 後 で getsockname(2) を 使 っ て 取 得 で き る )。
返 り 値
bindresvport() は 成 功 す る と 0 を 返 す 。 そ れ 以 外 の 場 合 、 −1 を 返 し 、 errno に エ ラ ー の 原 因 を 示 す 値 を 設 定 す る 。
エ ラ ー
bindresvport() は bind(2) と 同 じ 原 因 で 失 敗 す る 可 能 性 が あ る 。 さ ら に 、 以 下 の エ ラ ー が 発 生 す る こ と が あ る :
EACCES 呼 び 出 し 元 が ス ー パ ー ユ ー ザ ー の 特 権 を 持 っ て い な か っ た |
(よ り 正 確 に |
言 う と 、 CAP_NET_BIND_SERVICE ケ ー パ ビ リ テ ィ が 必 要 で あ る )。
EADDRINUSE 全
て の 特 権 ポ ー
ト が 使 用 中 で
あ る 。
EAFNOSUPPORT (glibc 2.7 以 前 で
は EPFNOSUPPORT)
sin が NULL 以 外 で 、 か つ sin−>sin_family が AF_INET で な か っ た 。
属 性
マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 )
glibc 2.17 よ り 前 の バ ー ジ ョ ン で は 、 bindresvport() 関 数 は 保 護 さ れ て い な い 静 的 変 数 を 使 用 し て い る た め 、 ス レ ッ ド セ ー フ で は な い 。
glibc 2.17 以 降 で は 、 bindresvport() 関 数 は 静 的 変 数 を 保 護 す る ロ ッ ク を 使 っ て お り 、 ス レ ッ ド セ ー フ で あ る 。
準 拠
POSIX.1−2001 に は な い 。 BSD, Solaris お よ び そ の 他 の 多 く の シ ス テ ム に 存 在 す る 。
注 意
bindresvport() の い く つ か の 実 装 と 異 な り 、 glibc の 実 装 で は 呼 び 出 し 元 が sin−>sin_port で 渡 し た 値 は ど ん な 値 で あ っ て も 無 視 さ れ る 。
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。