sockaddr

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等价的数据结构
在网络编程经常可以看到如此示例:

struct sockaddr_in server_sockaddr;
bind (server_sockfd, (struct sockaddr *)&server_sockaddr, server_len);struct sockaddr_un server_sockaddr;
bind (server_sockfd, (struct sockaddr *)&server_sockaddr, server_len);

在第二个参数我们通常会将其强制转化为通用的sockaddr。以下说明

sockaddr_in

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.sin_family=AF_INET;
mysock.sin_port=htons(8080);
mysock.sin_addr.s_addr=inet_addr(“192.168.0.1”);
……
等到要做转换的时候用:
(struct sockaddr*)&mysock

sockaddr_un

struct sockaddr_un
{sa_family_t sun_family; /*PF_UNIX或AF_UNIX */char sun_path[UNIX_PATH_MAX]; /* 路径名 */};

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

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

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

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

注意:
通常在使用前会先调用unlink 删除掉这文件保证后面正常使用

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

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

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

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

附协议族

Linux kernel include:Name         Purpose                                    Man pageAF_UNIX      Local communication                        unix(7)AF_LOCAL     Synonym for AF_UNIXAF_INET      IPv4 Internet protocols                    ip(7)AF_AX25      Amateur radio AX.25 protocol               ax25(4)AF_IPX       IPX - Novell protocolsAF_APPLETALK AppleTalk                                  ddp(7)AF_X25       ITU-T X.25 / ISO-8208 protocol             x25(7)AF_INET6     IPv6 Internet protocols                    ipv6(7)AF_DECnet    DECet protocol socketsAF_KEY       Key  management protocol, originally de‐veloped for usage with IPsecAF_NETLINK   Kernel user interface device               netlink(7)AF_PACKET    Low-level packet interface                 packet(7)AF_RDS       Reliable Datagram Sockets (RDS) protocol   rds(7)rds-rdma(7)AF_PPPOX     Generic PPP transport layer, for settingup L2 tunnels (L2TP and PPPoE)AF_LLC       Logical  link  control  (IEEE 802.2 LLC)protocolAF_IB        InfiniBand native addressingAF_MPLS      Multiprotocol Label SwitchingAF_CAN       Controller Area Network  automotive  busprotocolAF_TIPC      TIPC, "cluster domain sockets" protocolAF_BLUETOOTH Bluetooth low-level socket protocolAF_ALG       Interface to kernel crypto APIAF_VSOCK     VSOCK   (originally  "VMWare  VSockets")   vsock(7)protocol for hypervisor-guest communica‐tionAF_KCM       KCM  (kernel connection multiplexor) in‐terfaceAF_XDP       XDP (express data path) interface

Linux网络编程之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. Linux网络编程之IP地址转换为无符号整数的方法

    Linux网络编程之IP地址转换为无符号整数的方法,代码如下:(没考虑异常输入) #include <stdio.h> #include <string.h> #include ...

  3. Linux网络编程之TCP状态转移

    Linux网络编程之TCP状态转移 一.TCP状态转移时序 二.半关闭及shutdown函数 一.TCP状态转移时序 TCP状态转移图: netstat -apn | grep client 查看客户 ...

  4. 嵌入式linux ntpd命令,嵌入式Linux网络编程之:实验内容——NTP协议实现

    本文引用地址:http://www.eepw.com.cn/article/257114.htm 10.4实验内容--NTP协议实现 1.实验目的 通过实现NTP协议的练习,进一步掌握Linux网络编 ...

  5. Linux套接字编程之sockaddr与sockaddr_in网络套接字,sockaddr_un进程间通信本地套接字

    sockaddr struct sockaddr { unsigned  short  sa_family;     /* address family, AF_xxx */ char  sa_dat ...

  6. linux网络编程之Socket编程

    (1)socket套接字 1)在linux环境下,socket用于表示进程间网络通信的特殊文件类型,其本质是内核借助缓冲区形成的伪文件(不占磁盘空间,除此之外还有二进制文件,管道,字符文件). 2)伪 ...

  7. linux网络编程之socket编程(六)

    经过一个国庆长假,又有一段时间没有写博文了,今天继续对linux网络编程进行学习,如今的北京又全面进入雾霾天气了,让我突然想到了一句名句:"真爱生活,珍惜生命",好了,言归正传. ...

  8. linux ioctl网络参数设置,Linux 网络编程之ioctl函数

    1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...

  9. socket编程之sockaddr和sockaddr_in的区别

    sockaddr和sockaddr_in的区别 sockaddr和sockaddr_in详解 1.struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址 ...

最新文章

  1. Selenium3自动化测试——2. python编写简单自测代码
  2. Linux基本防护措施
  3. NYOJ 118 修路方案(次小生成树)
  4. jquery生成一个li_jquery-创建元素和添加子元素
  5. ajax跨域请求的问题
  6. Linux5配置jboss环境
  7. aelf帮助C#工程师10分钟零门槛搭建DAPP私有链开发环境
  8. Quick BI产品核心功能大图(四):Quick引擎加速--十亿数据亚秒级分析
  9. 为什么服务器要选择 Linux,这里总结了 10 大理由
  10. 【抠图工具】图片、视频自动抠图(VideoMatting)
  11. 一文了解 操作系统发展史
  12. 基于MFC的OpenDDS发布订阅例子(idl)
  13. javaweb框架 一些底层实现
  14. Linux常用软件包(常用命令)
  15. Pick定理、欧拉公式和圆的反演
  16. C语言学习教程免费分享
  17. 论文阅读《High-Definition Map Generation Technologies For Autonomous Driving: A Review》1
  18. 威联通文件传输服务器,QNAP NAS方案-------文件共享
  19. excel表格多个文件夹计算机,excle多文件并排_如何在电脑桌面并排显示多个excel...
  20. 还在跑遍武汉追樱花,这份武汉赏樱地图送给你

热门文章

  1. pandas读取⽂件的read_csv()⽅法的parse_dates参数
  2. CTF-安全杂项-功夫秘籍
  3. JDK源码系列:子线程如何继承父线程上通过ThreadLocal绑定的数据
  4. 免费版的mp3格式转换器有哪些?这三款软件帮你实现!
  5. lisp提取长方形坐标_如何利用lisp程序一次性提取CAD中点的坐标(不要点击每个点,太多了麻烦)...
  6. 如何在CAD图纸中提取各点的坐标?
  7. Android 检测设备是否为模拟器
  8. bim建筑绘图计算机要求,bim考试相关要求
  9. HashMap源码面试题
  10. 5分钟了解搜索引擎Lucene的原理