Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all
名前
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.54 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。