名 前
getsockopt, setsockopt − ソ ケ ッ ト の オ プ シ ョ ン の 設 定 と 取 得 を 行 な う
書 式
#include
<sys/types.h> /* 「 注 意
」 参 照 */
#include <sys/socket.h>
int
getsockopt(int sockfd, int
level, int optname,
void *optval, socklen_t
*optlen);
int setsockopt(int sockfd, int
level, int optname,
const void *optval, socklen_t
optlen);
説 明
getsockopt() と setsockopt() は 、 フ ァ イ ル デ ィ ス ク リ プ タ ー socket で 参 照 さ れ る ソ ケ ッ ト に 関 連 す る オ プ シ ョ ン の 操 作 を 行 う 。 オ プ シ ョ ン は 複 数 の プ ロ ト コ ル 層 (level)に 存 在 す る か も し れ な い が 、 こ れ ら は 常 に 最 上 位 の ソ ケ ッ ト 層 へ と 設 定 さ れ る 。 ソ ケ ッ ト オ プ シ ョ ン を 操 作 す る 際 に は 、 オ プ シ ョ ン の 層 (level) と オ プ シ ョ ン の 名 前 を 指 定 し な け れ ば な ら な い 。 ソ ケ ッ ト API 層 で オ プ シ ョ ン を 操 作 す る 為 に は 、 level を SOL_SOCKET に 指 定 す る 。 他 の 全 て の 層 で オ プ シ ョ ン を 操 作 す る 為 に は 、 与 え ら れ た オ プ シ ョ ン の 制 御 主 体 と な る プ ロ ト コ ル の プ ロ ト コ ル 番 号 を 指 定 す る 。 例 え ば 、 オ プ シ ョ ン が TCP プ ロ ト コ ル で 解 釈 さ れ る べ き こ と を 指 示 す る に は 、 level に TCP の プ ロ ト コ ル 番 号 を 指 定 し な け れ ば な ら な い 。 getprotoent(3) を 参 照 す る こ と 。
optval と optlen 引 き 数 は setsockopt() の オ プ シ ョ ン の 値 に ア ク セ ス す る た め に 用 い ら れ る 。 getsockopt() で は 要 求 し た オ プ シ ョ ン の 値 を 返 す た め の バ ッ フ ァ ー を 指 定 す る 。 getsockopt() で は optlen は 値 と 結 果 両 用 の 引 き 数 で 、 最 初 に optval の 指 し て い る バ ッ フ ァ ー の サ イ ズ を 与 え 、 実 際 に 返 さ れ る 値 の サ イ ズ に 書 き 換 え ら れ る 。 も し オ プ シ ョ ン 値 を 与 え ず 、 返 さ れ も し な い 場 合 に は optval は NULL で も 良 い 。
optname お よ び 指 定 さ れ た オ プ シ ョ ン は 解 釈 さ れ ず に 、 適 切 な プ ロ ト コ ル モ ジ ュ ー ル に 渡 さ れ て 解 釈 さ れ る 。 イ ン ク ル ー ド フ ァ イ ル <sys/socket.h> に は 後 述 の ソ ケ ッ ト 層 の オ プ シ ョ ン の 定 義 が 含 ま れ て い る 。 他 の プ ロ ト コ ル 層 で は 名 前 や 形 式 は 異 な る 。 マ ニ ュ ア ル の セ ク シ ョ ン 4 の 適 切 な エ ン ト リ ー を 参 照 す る こ と 。 ほ と ん ど の ソ ケ ッ ト 層 の オ プ シ ョ ン は optval に int 引 き 数 を 利 用 す る 。 setsockopt() で 、 二 値 (boolean)オ プ シ ョ ン を 有 効 (enable)に す る に は ゼ ロ 以 外 を 指 定 し 、 無 効 (disable)に す る に は ゼ ロ を 指 定 す る 。 利 用 可 能 な ソ ケ ッ ト オ プ シ ョ ン の 説 明 に 関 し て は 、 socket(7) と 適 切 な プ ロ ト コ ル の man ペ ー ジ を 参 照 の こ と 。
返 り 値
成 功 し た 場 合 に は ゼ ロ が 返 さ れ る 。 エ ラ ー 時 に は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。
エ ラ ー
EBADF 引 き 数 |
sockfd は 有 効 な デ ィ ス ク リ プ タ ー で な い 。 |
|||
EFAULT |
optval で 指 定 さ れ た ア ド レ ス が プ ロ セ ス の ア ド レ ス 空 間 の 有 効 な 部 分 で は な い 。 getsockopt() の 場 合 、 optlen が プ ロ セ ス の ア ド レ ス 空 間 の 有 効 な 部 分 で な い 場 合 に も こ の エ ラ ー が 返 さ れ る 。
EINVAL |
setsockopt() で option が 不 正 で あ る 。 optval に 無 効 な 値 が 指 定 さ れ た 場 合 に も 、 こ の エ ラ ー が 発 生 す る 可 能 性 が あ る (例 え ば 、 ip(7) に 説 明 が あ る IP_ADD_MEMBERSHIP オ プ シ ョ ン な ど )。 |
ENOPROTOOPT 指 定 さ れ た 層 (level)に は こ の オ プ シ ョ ン は 存 在 し な い 。
ENOTSOCK 引 き 数 |
sockfd が ソ ケ ッ ト で は な く フ ァ イ ル で あ る 。 |
準 拠
SVr4, 4.4BSD (こ れ ら の シ ス テ ム コ ー ル は 4.2BSD で 最 初 に 現 れ た ), POSIX.1−2001.
注 意
POSIX.1−2001 で は <sys/types.h> の イ ン ク ル ー ド は 必 須 と さ れ て お ら ず 、 Linux で は こ の ヘ ッ ダ ー フ ァ イ ル は 必 要 で は な い 。 し か し 、 歴 史 的 に は 、 い く つ か の 実 装 (BSD 系 ) で こ の ヘ ッ ダ ー フ ァ イ ル が 必 要 で あ り 、 移 植 性 が 必 要 な ア プ リ ケ ー シ ョ ン で は こ の フ ァ イ ル を イ ン ク ル ー ド す る の が 賢 明 で あ ろ う 。
getsockopt() と setsockopt() の optlen 引 き 数 は 実 際 は int [*] で あ る (そ し て 4.x BSD と libc4 と libc5 は そ う な っ て い る )。 POSIX で は 紆 余 曲 折 を 経 て 現 在 の socklen_t に な っ て お り 、 glibc で も socklen_t を 使 っ て い る 。 accept(2) も 参 照 の こ と 。
バ グ
ソ ケ ッ ト の オ プ シ ョ ン の い く つ か は シ ス テ ム の よ り 低 い 層 で 処 理 さ れ る べ き で あ る 。
関 連 項 目
ioctl(2), socket(2), getprotoent(3), protocols(5), ip(7), packet(7), socket(7), tcp(7), udp(7), unix(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。