歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> sockaddr與sockaddr_in

sockaddr與sockaddr_in

日期:2017/3/2 16:40:26   编辑:Linux服務器

struct sockaddr {

  unsigned short int sa_family; /* address family, AF_xxx */

  char sa_data[14]; /* address */

  };

  sa_family是地址家族,是“AF_xxx”的形式。常設為“AF_INET”,代表Internet(TCP/IP)地址族。

  sa_data是協議地址,由sa_family決定。如果sa_family=AF_INET,則sa_data就是sockaddr_in的sin_addr和sin_port。換句話說,這時sockaddr可以當作sockaddr_in看。

  struct 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]; /*to make same size as struct sockaddr */

  };

  struct in_addr {

  unsigned long s_addr;

  };

  sin_family意義與sa_family同。

  sin_port存儲端口號(使用網絡字節順序)

  sin_addr存儲IP地址,使用in_addr這個數據結構

  sin_zero是為了讓sockaddr與sockaddr_in兩個數據結構保持大小相同而保留的空字節。

  在 in_addr結構體中,s_addr按照網絡字節順序存儲IP地址。

  sin_zero用來將sockaddr_in結構填充到與struct sockaddr同樣的長度,可以用bzero()或memset()函數將其置為零。指向sockaddr_in的指針和指向sockaddr的指針可以相互轉換,這意味著如果一個函數所需參數類型是sockaddr類型時,你可以在函數調用的時候將一個指向sockaddr_in的指針轉換為指向sockaddr的指針;或者相反

Copyright © Linux教程網 All Rights Reserved