getpeername サブルーチン
目的
ピア・ソケットの名前を取得します。
ライブラリー
標準 C ライブラリー (libc.a)
構文
#include <sys/socket.h>
int getpeername ( Socket, Name, NameLength)
int Socket;
struct sockaddr *Name;
socklen_t *NameLength;
int getpeername ( Socket, Name, NameLength)
int Socket;
struct sockaddr *Name;
socklen_t *NameLength;
説明
getpeername サブルーチンは、指定されたソケットに接続されたピア・ソケットから Name パラメーターを検索します。 Name パラメーターには、正常終了時のピア・ソケットのアドレスが入っています。
別のプロセスによって作成されたプロセスは、オープン・ソケットを継承することができます。 作成されたプロセスは、継承したソケットのアドレスを識別する必要がある場合があります。 getpeername サブルーチンにより、プロセスは、ソケット接続のリモート・エンドにあるピア・ソケットのアドレスを検索することができます。
注: getpeername サブルーチンは、接続されたソケットでのみ作動します。
プロセスは、 getsockname サブルーチンを使用して、ソケットのローカル・アドレスを検索することができます。
getpeername サブルーチンを含むすべてのアプリケーションは、特定の値に設定された _BSD マクロを使用してコンパイルする必要があります。 許容値は 43 および 44 です。 さらに、すべてのソケット・アプリケーションに BSD libbsd.a ライブラリーを組み込む必要があります。
パラメーター
| 項目 | 説明 |
|---|---|
| ソケット | 接続されたソケットの記述子番号を指定します。 |
| Name | 正常終了時の宛先ソケットのアドレスが入っている sockaddr 構造体を指します。 /usr/include/sys/socket.h ファイルは、 sockaddr 構造体を定義します。 |
| NameLength | アドレス構造体のサイズを指します。 NameLength パラメーターを初期化して、 Name パラメーターが指すスペースの量を示します。 正常終了すると、戻された Name パラメーターの実際のサイズを戻します。 |
戻り値
正常終了時には、値 0 が戻され、 Name パラメーターはピア・ソケットのアドレスを保持します。
getpeername サブルーチンが失敗すると、システム・ハンドラーは以下の関数を実行します。
- 呼び出したプログラムに-11を返す。
- 特定のエラーを示すエラー・コードを errno グローバル変数に移動します。
エラー・コード
以下のいずれかのエラーが発生すると、 getpeername サブルーチンは失敗します。
| エラー | 説明 |
|---|---|
| EBADF | Socket パラメーターが有効ではありません。 |
| EINVAL | ソケットはシャットダウンされました。 |
| ENOTSOCK | Socket パラメーターは、ソケットではなくファイルを参照します。 |
| ENOTCONN | ソケットが接続していません。 |
| ENOBUFS | 呼び出しを完了するための十分なリソースがシステムにありませんでした。 |
| EFAULT | Address パラメーターは、ユーザー・アドレス・スペースの書き込み可能部分にはありません。 |
例
以下のプログラム・フラグメントは、 getpeername サブルーチンを使用して、ソケットの相手側に接続されたピアのアドレスを戻す方法を示しています。
struct sockaddr_in name;
int namelen = sizeof(name);
.
.
.
if(getpeername(0,(struct sockaddr*)&name, &namelen)<0){
syslog(LOG_ERR,"getpeername: %m");
exit(1);
} else
syslog(LOG_INFO,"Connection from %s",inet_ntoa(name.sin_addr));
.
.
.