getsockname() - ソケット名の取得

標準

標準/拡張機能 C/C++ 依存項目

XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

X/Open:
#define _XOPEN_SOURCE_EXTENDED 1
#include <sys/socket.h>

int getsockname(int socket, struct sockaddr *__restrict__ name,
                socklen_t *__restrict__ namelen);
バークレー・ソケット:
#define _OE_SOCKETS
#include <sys/types.h>
#include <sys/socket.h>

int getsockname(int socket, struct sockaddr *name,
                int *namelen);

機能説明

getsockname() 呼び出しは、socket パラメーターで使用されたソケットの現行名を、name エラー・コードで指定される構造体へ保管します。バインドされているソケットへのアドレスを戻します。ソケットがアドレスにバインドされていない場合は、呼び出しはファミリー・セットと一緒に戻し、構造体セットの残りはゼロに設定 されます。例えば、インターネット・ドメイン内にアンバインドされたソケットがあると、sockaddr_in 構造体を指すための名前が sin_family フィールドと共に AF_INET に設定され、その他のフィールドはゼロに設定されます。

アドレスの実際の長さが、提供された sockaddr の長さよりも長い場合は、アドレスは切り捨て られて保管されます。保管構造体の sa_len メンバーには、切り捨てられていないアドレスの長さが含まれます。
パラメーター
説明
socket
ソケット記述子。
name
getsockname() が socket の名前をコピーするバッファーのアドレス。
namelen
name が示すストレージのサイズ (バイト) を含む整数を最初に指す必要があります。戻りの際に、その整数には、接続ソケットのアドレス を表すために必要なサイズが入ります。 この値が、入力のときに提供されたサイズより大きい場合、sockaddr に入っている情報は、入力のときに提供された長さまで切り捨てられます。name が NULL であると、namelen は無視されます。

getsockname() 呼び出しは、通常、ソケットが暗黙的にポートへバインドされた後、ソケットへ割り当てられたポ ートを見つけるのに使用されます。例えば、アプリケーションでは、bind() を前に呼び出さなくて も、connect() を呼び出すことができます。この場合、connect() 呼び出しは、ポートをソケットに割り当てるのに必要なバインディング を完了します。この割り当ては、getsockname() を呼び出して見つけることができます。

AF_INET6 ドメインのソケット: AF_INET6 ソケットでは、アドレスは sockaddr_6 アドレス構造体に戻されます。sockaddr_in6 構造体は、ヘッダー・ファイル netinet/in.h の中に 定義されます。

C++ の特殊な動作: C++ でこの関数を使用するには、_XOPEN_SOURCE_EXTENDED 1 フィーチャー・テスト・マクロを使用する必要があります。
注: getsockname() 関数は、拡張 ASCII の拡張機能のレベルに依存します。詳細は、拡張 ASCII サポートを参照してください。

戻り値

正常に実行された場合、getsockname() は 0 を戻します。

正常に実行されなかった場合、getsockname() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EBADF
socket パラメーターが無効ソケット記述子です。
EFAULT
name および namelen パラメーターの指定を適用すると、呼び出し側のアドレス・スペースの外側のストレージにアクセスすることになります。
ENOBUFS
getsockname() は、ストレージ不足のため、要求を処理できな い。
ENOTCONN
ソケットは、接続状態ではありません。
ENOTSOCK
記述子はファイル用であり、ソケット用ではありません。
EOPNOTSUPP
その操作は、ソケット・プロトコルではサポートされません。

関連情報