win7+vs2013
sockaddr
//sockaddr_in// structure used to store most addresses.
//typedef struct sockaddr sockaddr, *psockaddr, far *lpsockaddr;
//// ipv4 socket address, internet style
//typedef struct sockaddr_in sockaddr_in, *psockaddr_in;
二者的占用的記憶體大小是一致的,因此可以互相轉化,從這個意義上說,他們並無區別。
sockaddr常用於bind、connect、recvfrom、sendto等函式的引數,指明位址資訊。是一種通用的套接字位址。而sockaddr_in 是internet環境下套接字的位址形式。所以在網路程式設計中我們會對sockaddr_in結構體進行操作。使用sockaddr_in來建立所需的資訊,最後使用型別轉化就可以了。
題外話,兩個函式 htons() 和 inet_addr()。
htons()作用是將埠號由主機位元組序轉換為網路位元組序的整數值。(host to net)
inet_addr()作用是將乙個ip字串轉化為乙個網路位元組序的整數值,用於sockaddr_in.sin_addr.s_addr。
inet_ntoa()作用是將乙個sin_addr結構體輸出成ip字串(network to ascii)。
htonl()作用和htons()一樣,不過它針對的是32位的,而htons()針對的是兩個位元組,16位的。
與htonl()和htons()作用相反的兩個函式是:ntohl()和ntohs()。
sockaddr與sockaddr in的比較
struct sockaddr sa family是位址家族,一般都是 af 的形式。好像通常大多用的是都是af inet。sa data是14位元組協議位址。此資料結構用做bind connect recvfrom sendto等函式的引數,指明位址資訊。但一般程式設計中並不直接針對此資料結構操作...
sockaddr與sockaddr in結構體簡介
struct sockaddr sa family是位址家族,一般都是 af 的形式。好像通常大多用的是都是af inet。sa data是14位元組協議位址。此資料結構用做bind connect recvfrom sendto等函式的引數,指明位址資訊。但一般程式設計中並不直接針對此資料結構操作...
sockaddr與sockaddr in結構體簡介
struct sockaddr sa family是位址家族,一般都是 af 的形式。好像通常大多用的是都是af inet。sa data是14位元組協議位址。此資料結構用做bind connect recvfrom sendto等函式的引數,指明位址資訊。但一般程式設計中並不直接針對此資料結構操作...