码迷,mamicode.com
首页 > 其他好文 > 详细

整理struct sockaddr和struct sockaddr_in

时间:2018-01-25 13:04:14      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:common   环境   网络   eof   div   .com   通用   comm   size   

struct sockaddr定义在/usr/include/linux/socket.h

struct sockaddr {

  unsigned short ss_family;

  char ss_data[128 - sizeof(unsigned short)];    // 14

}

struct sockaddr_in定义在/usr/include/netinet/in.h

struct sockaddr_in {

  in_port_t sin_port;

  struct in_addr sin_addr;      //struct in_addr {

                   //  unsigned long s_addr;   //32位的IP地址

                   //}

  /* Pad to size of `struct sockaddr‘. */

  unsigned char sin_zero[sizeof (struct sockaddr) -

            __SOCKADDR_COMMON_SIZE -

            sizeof (in_port_t) -

            sizeof (struct in_addr)];   // 8

}                      // sin_zero[8]的存在是为了保证struct sockaddr_in的大小和struct sockaddr的大小相等。

  struct sockaddr是通用的套接字地址。

  struct sockaddr_in是internet环境下套接字的地址形式。

  两者的长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr结构。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。

  //struct sockaddr_in servaddr;

  //bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr));

  BSD网络软件中包含了两个函数,用来在二进制地址格式和点分十进制字符串格式之间互相转换:

  仅支持IPV4:

    in_addr_t inet_addr(const char *cp);

    char *inet_ntoa(struct in_addr in);

  同时支持IPV4和IPV6:

    const char *inet_ntop(int domain, const void *addr, char *str, socklen_t size);

    int inet_pton(int domain, const char *str, void *addr);

  通常的用法:

  int sock_fd;

  struct sockaddr_in my_addr;

  sock_fd = socket(AF_INET, SOCK_STREAM, 0);

 

  my_addr.sin_family = AF_INET;   //

  my_addr.sin_port = htons(MyPort); //

  my_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

  

  bzero(&(my_addr.sin_zero), 8);   // zero the rest of the struct

  // memset(&my_addr.sin_zero, 0, 8);

  

  bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockeaddr));

  

参考:https://www.cnblogs.com/hnrainll/archive/2011/07/18/2109375.html

整理struct sockaddr和struct sockaddr_in

标签:common   环境   网络   eof   div   .com   通用   comm   size   

原文地址:https://www.cnblogs.com/coolYuan/p/8350649.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!