至于为何会使用两个数据结构sockaddr和sockaddr_in来表示地址,原因是如sa_family所指出的,socket设计之初本来就是准备支持多个地址协议的。不同的地址协议由自己不同的地址构造,譬如对于IPv4就是sockaddr_in, IPV6就是sockaddr_in6, 以及对于AF_UNIX就是sockaddr_un。sockaddr是对这些地址的上一层的抽象。另外,像socka...
sockaddr_in 结构体:struct sockaddr_in中的in 表示internet,就是网络地址,这只是我们比较常用的地址结构,属于AF_INET地址族,他非常的常用 sockaddr_in结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中 struct sockaddr_in { short int sin_family; unsigned short int sin_port; struct in_addr sin...
s_fd = socket(AF_INET,SOCK_STREAM,0); s_addr.sin_family = AF_INET; s_addr.sin_port = htons(8666); inet_aton("192.168.1.88",&s_addr.sin_addr); bind(s_fd, (struct sockaddr *)&s_addr,sizeof(struct sockaddr_in)); listen(s_fd,10); int clen = sizeof(struct sockaddr_in); ...
__SOCKADDR_COMMON (sa_);//2 bytes address family, AF_xxxcharsa_data[14];//14 bytes of protocol address}; typedef unsignedshortintsa_family_t;#define__SOCKADDR_COMMON(sa_prefix) \sa_family_t sa_prefix##family struct sockaddr_in定义如下: structsockaddr_in { __SOCKADDR_COMMON (sin_);/...
socket编程——sockaddr_in结构体操作 sockaddr结构体 sockaddr的缺陷: struct sockaddr 是⼀个通⽤地址结构,这是为了统⼀地址结构的表⽰⽅法,统⼀接⼝函数,使不同的地址结构可以被bind() , connect() 等函数调⽤;sa_data把⽬标地址和端⼝信息混在⼀起了 struct sockaddr { unsigned short...
socket 编程--sockaddr与sockaddr_in区别与联系(转) 在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 ...
sockaddr_in(port, host) → sockaddr pack_sockaddr_in(port, host) → sockaddr将port 和host 打包为 AF_INET/AF_INET6 sockaddr 字符串。 Socket.sockaddr_in(80, "127.0.0.1") #=> "\x02\x00\x00P\x7F\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00" Socket.sockaddr_in(80, "::1") #...
一、sockaddr和sockaddr_in在字节长度上都为16个BYTE,可以进行转换 struct sockaddr { unsigned short sa_family; //2 char sa_data[14]; //14 }; 上面是通用的socket地址,具体到Internet socket,用下面的结构,二者可以进行类型转换 struct socka ...
sockaddr_in结构体中使用到的struct in_addr就是4字节、32位的IP地址。它的定义有两个,不过编程的时候用的比较多in_addr_t 1 2 3 4 5 6 7 8 structin_addr{ union{ struct{u_chars_b1,s_b2,s_b3,s_b4;}S_un_b; struct{u_shorts_w1,s_w2;}S_un_w; ...
sockaddr_in有填充是因为ipv4地址本身不需要sizeof(sockaddr)来表示,因此要确保其在被重释(reinterpret)...