GETPEERNAME(2)

名前
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) も参照のこと。 For stream sockets, once a connect(2) has been performed, either socket can call getpeername() to obtain the address of the peer socket. On the other hand, datagram sockets are connectionless. Calling connect(2) on a datagram socket merely sets the peer address for outgoing datagrams sent with write(2) or recv(2). The caller of connect(2) can use getpeername() to obtain the peer address that it earlier set for the socket. However, the peer socket is unaware of this information, and calling getpeername() on the peer socket will return no useful information (unless a connect(2) call was also executed on the peer). Note also that the receiver of a datagram can obtain the address of the sender when using recvfrom(2).

関連項目
accept(2), bind(2), getsockname(2), ip(7), socket(7), unix(7)

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