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

struct sockaddr {

  unsigned short ss_family;

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

}

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)];   //

}                      // 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, );

  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), );   // 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

最新文章

  1. django例子,question_text为中文时候报错
  2. Spring 学习笔记 3. 尚硅谷_佟刚_Spring_配置 Bean
  3. javascript类型系统——包装对象
  4. mysql apache php install
  5. Ubuntu安装Vim编辑器
  6. [ActionScript 3.0] Away3D 天空盒(skybox)例子2
  7. [转]C/C++中的memset
  8. struts2-ajax-jQuery
  9. Highcharts20151130
  10. java培训(1-4节课)
  11. ASP.NET Mvc Razor视图语法
  12. commons-lang使用
  13. final关键字(最终的)
  14. 7.modifier插件的自定义和使用
  15. [转]Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
  16. Java 10 的 10 个新特性,将彻底改变你写代码的方式!
  17. 【IDEA填坑】xml不编译
  18. Java 实现ftp 文件上传、下载和删除
  19. Python循环_for&while
  20. Spring Boot Admin 日志查看功能

热门文章

  1. zabbix几个配置的关系
  2. 14 微服务电商【黑马乐优商城】:day01-springboot(理论篇)
  3. Asp.Net MVC主项目访问不到分离项目控制器的解决方案
  4. 1. Ruby基础知识
  5. CodeForces - 697B
  6. 图之强连通--Tarjan算法
  7. IOC&AOP
  8. ServletUtils
  9. 【转】Linux虚拟终端命令Screen用法详解
  10. Regex: positive lookahead 先行断言____ 后行断言(lookbehind)