Manpages

名 前

getpeername − 接 続 し て い る 相 手 ソ ケ ッ ト の 名 前 を 取 得 す る

書 式

#include <sys/socket.h>

int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

説 明

getpeername() は 、 ソ ケ ッ ト (socket) sockfd に 接 続 し て い る 相 手 の ア ド レ ス を 、 addr が 指 す バ ッ フ ァ ー に 格 納 し て 返 す 。 addrlen 引 き 数 は 、 addr が 指 し て い る 領 域 の サ イ ズ に 初 期 化 し て お か な け れ ば な ら な い 。 関 数 が 返 る 時 に は 、 addrlen に は 実 際 に 返 さ れ た 名 前 の サ イ ズ が (バ イ ト 単 位 で ) 格 納 さ れ る 。 提 供 さ れ た バ ッ フ ァ ー が 小 さ す ぎ た 場 合 に は 、 名 前 は 切 り 詰 め ら れ る 。 渡 さ れ た バ ッ フ ァ ー が 小 さ 過 ぎ た 場 合 は 、 返 さ れ る ア ド レ ス の 末 尾 が 切 り 詰 め ら れ る 。 こ の 場 合 に は 、 addrlen に は 、 呼 び 出 し 時 に 指 定 さ れ た 値 よ り も 大 き な 値 が 格 納 さ れ る 。

返 り 値

成 功 し た 場 合 は 0 が 返 さ れ る 。 エ ラ ー の 場 合 は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。

エ ラ ー

EBADF 引 き 数

sockfd が 有 効 な デ ィ ス ク リ プ タ ー で な い 。

EFAULT

addr 引 き 数 の 指 し て い る メ モ リ ー が 有 効 な プ ロ セ ス の ア ド レ ス 空 間 の 一 部 で な い 。

EINVAL

addrlen が 不 正 で あ る (例 え ば 、 負 で 場 合 な ど )。

ENOBUFS こ の 操 作 を 行 な う の に 十 分 な 資 源 が シ ス テ ム に 存 在 し な い 。
ENOTCONN
ソ ケ ッ ト が 接 続 し て い な い 。
ENOTSOCK
引 き 数 sockfd が ソ ケ ッ ト で な く て フ ァ イ ル で あ る 。

準 拠

SVr4, 4.4BSD (getpeername() 関 数 は 4.2BSD で 登 場 し た ), POSIX.1−2001.

注 意

getpeername() の 三 番 目 の 引 き 数 は 実 際 に は ’int *’ で あ る (4.x BSD, libc4, libc5 で は こ の よ う に な っ て い る )。 POSIX で は 紆 余 曲 折 を 経 て 現 在 の socklen_t に な っ て お り 、 glibc で も socklen_t を 使 っ て い る 。 accept(2) も 参 照 の こ と 。 ス ト リ ー ム ソ ケ ッ ト で は 、 い っ た ん connect(2) が 実 行 さ れ る と 、 ど の ソ ケ ッ ト も getpeername() を 使 っ て 相 手 ソ ケ ッ ト の ア ド レ ス を 取 得 で き る 。 一 方 、 デ ー タ グ ラ ム ソ ケ ッ ト は コ ネ ク シ ョ ン レ ス で あ る (接 続 が な い )。 デ ー タ グ ラ ム ソ ケ ッ ト に 対 す る connect(2) の 呼 び 出 し は 、 write(2)recv(2) で 送 信 さ れ る 出 力 デ ー タ グ ラ ム の 相 手 ア ド レ ス を 設 定 す る だ け で あ る 。 connect(2) の 呼 び 出 し 元 は 、 getpeername() を 使 っ て 、 そ れ 以 前 に そ の ソ ケ ッ ト に 設 定 さ れ た 相 手 ア ド レ ス を 取 得 す る こ と が で き る 。 し か し 、 相 手 ソ ケ ッ ト は こ の 情 報 を 知 ら な い の で 、 相 手 ソ ケ ッ ト で getpeername() を 呼 び 出 し て も 、 役 に 立 つ 情 報 は 得 ら れ な い (相 手 側 で も connect(2) が 呼 び 出 さ れ て い る 場 合 を 除 く )。 な お 、 デ ー タ グ ラ ム の 受 信 側 で は recvfrom(2) を 使 っ て 送 信 元 ア ド レ ス を 取 得 で き る こ と も 覚 え て お い て ほ し い 。

関 連 項 目

accept(2), bind(2), getsockname(2), ip(7), socket(7), unix(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。