short int sin_family; /* 地址族 */ unsigned short int sin_port; /* 端口号 */ struct in_addr sin_addr; /* Internet地址 */ unsigned char sin_zero[8]; /* 与struct sockaddr一样的长度 */ }; struct in_addr就是32位IP地址。 struct in_addr { unsigned long s_addr; }; 也有 struct ...
/* 字符数组sin_zero[8]的存在是为了保证结构体struct sockaddr_in的大小和结构体struct sockaddr的大小相等 */ }; struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向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 ...
/* 字符数组sin_zero[8]的存在是为了保证结构体struct sockaddr_in的大小和结构体struct sockaddr的大小相等 */ }; struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下...
分别表示端口、ip地址。sin_zero用来填充字节使sockaddr_in和sockaddr保持一样大小。 sockaddr和sockaddr_in包含的数据都是一样的,但他们在使用上有区别: 程序员不应操作sockaddr,sockaddr是给操作系统用的 程序员应使用sockaddr_in来表示地址,sockaddr_in区分了地址和端口,使用更方便。
sin_family指代协议族,在socket编程中只能是AF_INET sin_port存储端口号(使用网络字节顺序) sin_addr存储IP地址,使用in_addr这个数据结构 sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。 s_addr按照网络字节顺序存储IP地址 ...
struct sockaddr_in sin; struct sockaddr_in netmask; struct sockaddr_in broad; struct ifreq ifr; unsigned char arp[6]; int main() { int sockfd; //create socket sockfd = socket(AF_INET,SOCK_DGRAM,0); if(sockfd == -1) { perror("socket"); ...
而struct sockaddr_in是在struct sockaddr的基础上针对 IPv4 地址进行特定定义的结构体,它包含了 IP 地址和端口号信息。它定义如下: structsockaddr_in{ shortsin_family;// 地址族,固定为 AF_INET unsignedshortsin_port;// 端口号 structin_addr sin_addr;// IPv4 地址结构 ...
voidinitlistensocket(intefd,shortport){structsockaddr_insin; intlfd = socket(AF_INET, SOCK_STREAM,0);fcntl(lfd, F_SETFL, O_NONBLOCK);//将socket设为非阻塞 memset(&sin,0,sizeof(sin));//bzero(&sin, sizeof(sin))sin.sin_family = AF_INET;sin.sin_addr.s_addr = INADDR_ANY;sin.sin...
struct sockaddr_in { //通信地址类型 short int sin_family; //端口号 in_port_t sin_port; //ip地址 struct in_addr sin_addr; } 准备好的通信地址通常要将其强制转换成基本通信地址才能传给函数使用。 int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen); ...