struct sockaddr_in {
short int sin_family; /* 地址族 */
unsigned short int sin_port; /* 端口號 */
struct in_addr sin_addr; /* Internet地址 */
unsigned char sin_zero[8]; /* 與struct sockaddr一樣的長度 */
};
struct in_addr就是32位IP地址。
struct in_addr {
unsigned long s_addr;
};
所以 sin_addr 就是結構體 in_addr, 里面包含s_addr這32位IP地址
1、 inet_addr、 inet_ntoa inet_aton
a、inet_addr()的作用,就是將inet_addr()轉化為長整數
inet_addr()的功能是將一個點分十進制的IP轉換成一個長整數型數(u_long類型)等同於inet_addr(),
主要將一個點間隔地址轉換成一個in_addr。 方便賦值給 in_addr
b、inet_ntoa 主要是將 sin_addr的這32位整數轉換成"."點隔的字符串格式
inet_ntoa(sin_addr)
c、inet_aton 跟 inet_ntoa 的相反, 主要是將點隔的字符串轉換為sin_addr這個結構體的內容
inet_addr 與 inet_aton、inet_ntoa的主要區別是 inet_addr 直接賦值給s_addr, 而inet_ntoa針對的是struct in_addr這個結構體
http://www.cnblogs.com/hnrainll/archive/2011/07/18/2109375.html
該網址區分struct sockaddr 與 struct sockaddr_in 這兩個結構體
本質上是一樣的內容。