struct sockaddr {unsigned short sa_family;         /* address family, AF_xxx */char sa_data[14];                 /* 14 bytes of protocol address */
};

sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF_INET。
sa_data是14字节协议地址。
此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。

但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构sockaddr_in(在netinet/in.h中定义):

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];         /* Same size as struct sockaddr */
};struct in_addr {unsigned long s_addr;
};typedef struct in_addr {union {struct{unsigned char s_b1,s_b2,s_b3,s_b4;} S_un_b;struct {unsigned short s_w1,s_w2;} S_un_w;unsigned long S_addr;} S_un;
} IN_ADDR;

sin_family指代协议族,在socket编程中只能是AF_INET
sin_port存储端口号(使用网络字节顺序)
sin_addr存储IP地址,使用in_addr这个数据结构
sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
s_addr按照网络字节顺序存储IP地址

sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向sockadd的结构体,并代替它。也就是说,你可以使用sockaddr_in建立你所需要的信息,在最后用进行类型转换就可以了。

bzero((char*)&mysock,sizeof(mysock));//初始化
mysock结构体名
mysock.sa_family=AF_INET;
mysock.sin_addr.s_addr=inet_addr("192.168.0.1");
……
等到要做转换的时候用:
(struct sockaddr*)mysock

最后说一下sockaddr_un

进程间通信的一种方式是使用UNIX套接字,人们在使用这种方式时往往用的不是网络套接字,而是一种称为本地套接字的方式。这样做可以避免为黑客留下后门。

创建
    使用套接字函数socket创建,不过传递的参数与网络套接字不同。域参数应该是PF_LOCAL或者PF_UNIX,而不能用PF_INET之类。本地套接字的通讯类型应该是SOCK_STREAM或SOCK_DGRAM,协议为默认协议。例如:

int sockfd;
sockfd = socket(PF_LOCAL, SOCK_STREAM, 0);

绑定
    创建了套接字后,还必须进行绑定才能使用。不同于网络套接字的绑定,本地套接字的绑定的是struct sockaddr_un结构。struct sockaddr_un结构有两个参数:sun_family、sun_path。sun_family只能是AF_LOCAL或AF_UNIX,而sun_path是本地文件的路径。通常将文件放在/tmp目录下。例如:

struct sockaddr_un sun;
sun.sun_family = AF_LOCAL;
strcpy(sun.sun_path, filepath);
bind(sockfd, (struct sockaddr*)&sun, sizeof(sun));

监听
    本地套接字的监听、接受连接操作与网络套接字类似。

连接
    连接到一个正在监听的套接字之前,同样需要填充struct sockaddr_un结构,然后调用connect函数。

连接建立成功后,我们就可以像使用网络套接字一样进行发送和接受操作了。甚至还可以将连接设置为非阻塞模式,这里就不赘述了。

sockaddr,sockaddr_in,sockaddr_un结构体详细讲解相关推荐

  1. Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

    Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解 (1)sockaddr struct sockaddr { unsigned  short  sa_ ...

  2. (摘录)sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

    struct sockaddr { unsigned short sa_family;     /* address family, AF_xxx */ char sa_data[14];       ...

  3. c语言sockaddr_in结构体,转:sockaddr与sockaddr_in结构体详细讲解

    sockaddr与sockaddr_in结构体详细讲解 二者区别 struct sockaddr { unsigned short sa_family;     /* address family, ...

  4. sockaddr与sockaddr_in,sockaddr_un结构体详解

    struct sockaddr { unsigned short sa_family;     /* address family, AF_xxx */ char sa_data[14];       ...

  5. x264重要结构体详细说明(4): x264_t

    本博客转载于:http://nkwavelet.blog.163.com/blog/static/227756038201431010539683/ x264_t是一个控制X264编码的全局性结构体, ...

  6. 看了这篇c语言结构体精讲解,你难道还怕你不会吗?

    本文主要介绍结构体入门,结构体指针的教学,请读者讲此段代码复制在Devc++,以便更好阅读体验.谢谢. #include<stdio.h> //结构体教学 首先,结构体的格式是在主函数前先 ...

  7. STM32—PID结构体使用讲解

    1.这篇文章的目的 由于本人之前做过的很多项目中,基本上都用到了pid算法,发现pid用起来是真香,不仅算法简单,控制的效果也是很不错的,基本上都能够达到要求.但是随着我做过的项目多了,发现每次做一个 ...

  8. sockaddr与sockaddr_in结构体简介

    struct sockaddr {unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 byte ...

  9. linux sockaddr结构体,linux网络编程笔记 sockaddr_in结构体[转]

    struct sockaddr { unsigned short sa_family; char sa_data[14]; }; 此数据结构用做bind.connect.recvfrom.sendto ...

最新文章

  1. linux maven编译代码,git拉源码maven构建后部署脚本详解
  2. SAP如何直接往系统中数据库表插入数据
  3. 2021-11-18哈希值
  4. 编译OpenJDK及JDK题外话
  5. 汇编[bx+idata](8086)
  6. LeetCode 589. N叉树的前序遍历(前序遍历)
  7. 什么样的前端框架才是一个好框架
  8. 标签中的onclick调用js方法传递多个参数的解决方案
  9. chrome离线安装包的稳定下载方法
  10. 【校招VIP】产品行测之逻辑计算题
  11. msm8953 android8.1编译环境搭建
  12. LC-3简易四子棋(深大计系1实验4) 思路+代码+详细注释
  13. ROS routeros mikrotik路由器CVE-2018-14847漏洞
  14. 利用FME自动生成CAD图框
  15. Python+opencv学习记录3:色彩空间
  16. 电脑升级到WIN11系统无法打开QQ和TIM?我来教你如何解决
  17. 218 扑克牌(数学期望)
  18. Don't Call Yourself A Programmer, And Other Career
  19. 这套系统,可能真的是数据分析师们未来5年的机遇!
  20. 01-贪吃蛇自动寻路

热门文章

  1. R048---UiPath中四种筛选数据的方法
  2. python 仪表盘 ppt_python+仪表
  3. 懵懂入行,但一做就沉心钻研十年——记访谈阿里云SQL Server专家杨钊
  4. VIC Classic 驱动程序
  5. 母婴购物微信商城的设计与实现
  6. 利用电子计算机处理数字化的影像信息,影像诊断习题题库适合复习考试使用
  7. 【MATLAB笔记】基本矩阵操作函数
  8. 什么是Java序列化?
  9. 软件版本各阶段英文名称
  10. 金山办公2020笔试