0

私の知る限り、sockaddr 構造は次のもので構成されています。

struct sockaddr 
{   
    unsigned short sa_family;  
    char sa_data[14];          
}; `

構造データが既にある場合: そこから IP を取得するにはどうすればよいですか?

4

1 に答える 1

1

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ます。

于 2013-06-12T19:09:31.357 に答える