Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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/ に書かれている。

Linux                                              2017-09-15                                     GETPEERNAME(2)