私の知る限り、sockaddr 構造は次のもので構成されています。
struct sockaddr
{
unsigned short sa_family;
char sa_data[14];
}; `
構造データが既にある場合: そこから IP を取得するにはどうすればよいですか?
struct sockaddr
ファミリに依存する特定のサブクラスにキャストする必要があります。
AF_UNIX
にキャストstruct sockaddr
します。struct sockaddr_un
AF_INET
にキャストstruct sockaddr
します。struct sockaddr_in
AF_INET6
にキャストstruct sockaddr
します。struct sockaddr_in6
構造体を後者の型のいずれかにキャストすると、その構造体からアドレスを取得できます。アドレスの形式はプロトコルごとに異なり、アドレスを含むフィールドの名前とタイプも異なることに注意してください。たとえば、ファミリが である場合、AF_UNIX
からパス名を取得できますsun_path
(この場合、IP アドレスのようなものはありません)。ファミリが である場合AF_INET6
、IP アドレスとポート番号はそれぞれsin6_addr
およびから取得できsin6_port
ます。