struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别

在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下:

typedef unsigned short sa_family_t;

struct sockaddr {

 sa_family_t     sa_family;    /* address family, AF_xxx       */

 char            sa_data[14];    /* 14 bytes of protocol address */

};

在linux环境下,结构体struct sockaddr_in在/usr/include/netinet/in.h中定义,具体如下:

/* Structure describing an Internet socket address. */

struct sockaddr_in

{

__SOCKADDR_COMMON (sin_);

in_port_t sin_port;                     /* Port number. */

struct in_addr sin_addr;            /* Internet address. */

/* 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中用到两个数据类型,具体定义如下:

/* Type to represent a port. */

typedef uint16_t in_port_t;

struct in_addr其实就是32位IP地址

struct in_addr {

 unsigned long s_addr;

};

时间: 2024-10-31 03:46:20

struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别的相关文章

结构体sockaddr与struct sockaddr_in的区别和联系

上午学习TinyHttpd的源码,sockaddr 结构体以前没接触过, 在网络编程中经常用到struct sockaddr和struct sockaddr_in,这里简单介绍. 在linux环境下,结构体 struct sockaddr在/usr/include/linux/socket.h 中定义,具体如下: 1 2 3 4 typedef unsigned short sa_family_t; struct sockaddr { sa_family_t sa_family; /* addr

addrinfo&sockaddr结构解析

1 addrinfo addrinfo结构内容如下: struct addrinfo { int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */ int ai_family; /* PF_xxx */ int ai_socktype; /* SOCK_xxx */ int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ socklen_t ai_addrlen; /* l

套接口编程

1 struct in_addr{ 2 in_addr_t s_addr; 3 }; 4 struct sockaddr_in{ 5 uint8_t sin_len; 6 sa_family_t sin_family; 7 in_port_t sin_port; 8 9 struct in_addr sin_addr; 10 char sin_zero[8]; 11 }; 通用套接口地址结构: struct sockaddr{ uint8_t sa_len; sa_family_t sa_fam

网络子系统81_inet协议族-SOCK_RAW(二)

// struct sock->sk_prot字段 // struct proto为插口层到传输层的接口 4.1 struct proto raw_prot = { .name = "RAW", .owner = THIS_MODULE, .close = raw_close, .destroy = raw_destroy, .connect = ip4_datagram_connect, .disconnect = udp_disconnect, .ioctl = raw_io

iOS支持IPV6

iOS应用支持IPV6,就那点事儿 果然是苹果打个哈欠,iOS行业内就得起一次风暴呀.自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6,以及应用中哪些模块目前不支持IPV6. 一.IPV6-Only支持是啥? 首先IPV6,是对IPV4地址空间的扩充.目前当我们用iOS设备连接上Wifi.4G.3G等网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IPV6 DNS64/NAT64网络之后

网络扫描程序的详细分析与实现

1.网络扫描简介 网络扫描是一种自动化程序,用于检测远程或本地主机的弱点和漏洞.漏洞扫描是入侵防范最基本的工作,攻击者正式利用各种漏洞入侵系统.借助自动化的扫描工作,在攻击者之前发现漏洞问题,并给予相应的修正程序. 一名攻击者入侵系统,一般分为四个步骤:系统发现,漏洞探测,漏洞利用和痕迹清除. 本文的重点就是在于系统发现与漏洞探测方面. 2.端口扫描技术 端口扫描能够用来查找目标主机已开放的端口,包括TCP和UDP端口.当前针对TCP端口的扫描技术有三种,分别为:全连接扫描,SYN扫描和FIN扫

Linux网络编程入门

(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端          网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端         在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一         个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序.  服务端        

《深入剖析Nginx》——2.6 特殊应用逻辑的调试

2.6 特殊应用逻辑的调试 前面所讲的调试方法都是针对Nginx本身很容易跑到的逻辑,而对于某些只有在特定情况下才会被执行到的代码,又该怎样去调试呢?举个例子,我们知道Nginx里有大量的超时处理,比如,如果读取客户端请求头部数据超时,Nginx就将执行对应的超时处理函数,假设我想通过单步执行的方式来了解这部分相关逻辑,无疑就得让Nginx的执行逻辑走到这条路径上来.由于此时影响Nginx行为的决定因素是客户端所发送的请求头部数据,我们就必须在客户端做动作来构造出这种场景.一般的浏览器,如IE.

《APUE》读书笔记-第十六章网络IPC:套接字

通过网络套接字可以使得不同计算机上运行的进程相互通信. 1.创建套接字 #include <sys/socket.h> Int socket( int domain, int type, int protocol); 注意:AF_LOCAL域是AF_UNIX的别名,AF_UNSPEC域可以代表任何域. 2.套接字通信是双向的,禁止套接字上的输入/输出 #include < sys/socket.h> Int shutdown ( int sockfd, int how); 3.处理