Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_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 がソケットを参照していない。
準拠
POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD (getpeername() 関数コールは 4.2BSD で初めて登場 した)。
注意
For background on the socklen_t type, see 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 プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。