sockaddr_in中sin_zero的意义,以及sockaddr_in sockaddr in_addr区别联系
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
sa_family是地址家族,是“AF_xxx”的形式。常設(shè)為“AF_INET”,代表Internet(TCP/IP)地址族。
sa_data是協(xié)議地址,由sa_family決定。如果sa_family=AF_INET,則sa_data就是sockaddr_in的sin_addr和sin_port。換句話說,這時sockaddr可以當作sockaddr_in看。
short int sin_family; // Address family
unsigned short int sin_port; // Port number
struct in_addr sin_addr; // Internet address
unsigned char sin_zero[8]; // Same size as struct sockaddr
};
struct in_addr {
unsigned long s_addr; // that’s a 32-bit long, or 4 bytes
};
sin_family意義與sa_family同。
sin_port存儲端口號(使用網(wǎng)絡(luò)字節(jié)順序)
sin_addr存儲IP地址,使用in_addr這個數(shù)據(jù)結(jié)構(gòu)
sin_zero是為了讓sockaddr與sockaddr_in兩個數(shù)據(jù)結(jié)構(gòu)保持大小相同而保留的空字節(jié)。
在 in_addr結(jié)構(gòu)體中,s_addr按照網(wǎng)絡(luò)字節(jié)順序存儲IP地址。
?
sin_zero用來將sockaddr_in結(jié)構(gòu)填充到與struct sockaddr同樣的長度,可以用bzero()或memset()函數(shù)將其置為零。指向sockaddr_in的指針和指向sockaddr的指針可以相互轉(zhuǎn)換,這意味著如果一個函數(shù)所需參數(shù)類型是sockaddr類型時,你可以在函數(shù)調(diào)用的時候?qū)⒁粋€指向sockaddr_in的指針轉(zhuǎn)換為指向sockaddr的指針;或者相反。
想來你是要進行網(wǎng)絡(luò)編程,使用socket, listen, bind等函數(shù)。你只要記住,填值的時候使用sockaddr_in結(jié)構(gòu),而作為函數(shù)的參數(shù)傳入的時候轉(zhuǎn)換成sockaddr結(jié)構(gòu)就行了,畢竟都是16個字符長。
總結(jié)
以上是生活随笔為你收集整理的sockaddr_in中sin_zero的意义,以及sockaddr_in sockaddr in_addr区别联系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (转载) min()的宏定义中的(voi
- 下一篇: SMT精密电阻对照表