Linux Cのsockaddrとsockaddr_inの違い
2107 ワード
Linux Cのsockaddrとsockaddr_inの違い
struct sockaddrとstruct sockaddr_inこの2つの構造体は、ネットワーク通信のアドレスを処理するために使用される.
様々なシステム呼び出しまたは関数では,ネットワークアドレスと付き合う限り,この2つの構造体が用いられる.
ネットワーク内のアドレスには、次の3つの要素があります.
1アドレスタイプ:ipv 4またはipv 6 2 ipアドレス3ポート
対応するヘッダファイルには、次の定義があります.
注記には、属性の意味とそのバイトサイズが明記されています.この2つの構造体は同じ大きさで、いずれも16バイトで、family属性があります.違いは、次のとおりです.
sockaddrは残りの14バイトでsaを表すdata,sockaddr_in 14バイトをsin_に分割port, sin_addrとsin_zeroはそれぞれポート、ipアドレスを表す.sin_zeroはバイトを埋めてsockaddr_をinはsockaddrと同じ大きさに保たれています.
sockaddrとsockaddr_inに含まれるデータは同じですが、使用には違いがあります.
プログラマーはsockaddrを操作すべきではありません.sockaddrはオペレーティングシステム用です.
プログラマはsockaddrを使用する必要があります.inアドレスを表すsockaddr_inアドレスとポートを区別して使いやすいです.
一般的な使い方は次のとおりです.
プログラマはタイプ、ipアドレス、ポートをsockaddr_に埋め込むIn構造体を強制的にsockaddrに変換し、パラメータとしてシステム呼び出し関数に渡す
ネットワークプログラミングの典型的なコードは次のとおりです.
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!
struct sockaddrとstruct sockaddr_inこの2つの構造体は、ネットワーク通信のアドレスを処理するために使用される.
様々なシステム呼び出しまたは関数では,ネットワークアドレスと付き合う限り,この2つの構造体が用いられる.
ネットワーク内のアドレスには、次の3つの要素があります.
1アドレスタイプ:ipv 4またはipv 6 2 ipアドレス3ポート
対応するヘッダファイルには、次の定義があります.
include
struct sockaddr {
unsigned short sa_family; // 2 bytes address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
// IPv4 AF_INET sockets:
struct sockaddr_in {
short sin_family; // 2 bytes e.g. AF_INET, AF_INET6
unsigned short sin_port; // 2 bytes e.g. htons(3490)
struct in_addr sin_addr; // 4 bytes see struct in_addr, below
char sin_zero[8]; // 8 bytes zero this if you want to
};
struct in_addr {
unsigned long s_addr; // 4 bytes load with inet_pton()
};
注記には、属性の意味とそのバイトサイズが明記されています.この2つの構造体は同じ大きさで、いずれも16バイトで、family属性があります.違いは、次のとおりです.
sockaddrは残りの14バイトでsaを表すdata,sockaddr_in 14バイトをsin_に分割port, sin_addrとsin_zeroはそれぞれポート、ipアドレスを表す.sin_zeroはバイトを埋めてsockaddr_をinはsockaddrと同じ大きさに保たれています.
sockaddrとsockaddr_inに含まれるデータは同じですが、使用には違いがあります.
プログラマーはsockaddrを操作すべきではありません.sockaddrはオペレーティングシステム用です.
プログラマはsockaddrを使用する必要があります.inアドレスを表すsockaddr_inアドレスとポートを区別して使いやすいです.
一般的な使い方は次のとおりです.
プログラマはタイプ、ipアドレス、ポートをsockaddr_に埋め込むIn構造体を強制的にsockaddrに変換し、パラメータとしてシステム呼び出し関数に渡す
ネットワークプログラミングの典型的なコードは次のとおりです.
int sockfd;
struct sockaddr_in servaddr;
sockfd = Socket(AF_INET, SOCK_STREAM, 0);
/* struct sockaddr_in */
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
/* struct sockaddr */
connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!