一、结构体 struct sockaddr_in, struct sockaddr, struct in_addr struct sockaddr_in, struct sockaddr,struct in_addr,这是网络编程中常用的结构体,每次都记不住它们各自的成员是啥,需要临时查,为方便以后的查看,在这里总结下。 struct sockaddr { unsigned short sa_family; /* 地址族, AF_xxx */ char s...
struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。 下面是struct sockaddr_in中用到两个数据类型,具体...
bind(sockfd, (struct sockaddr*) &nl, sizeof(nl)); 2 填充所需数据结构,并通过sendmsg()/send()等函数写到套接字里去 到此为止,与内核通信的准备工作就完成了,下面要做的工作是,选取适当的数据结构进行填充,并作为sendmsg()的参数发送出去,并recv()收到的消息。这个数据结构就是nlmsghdr,它只是一个信息头...
struct sockaddr 和 struct sockaddr_in 这两个结构体用来处理网络通信的地址。 //以下是 IPv4 的定义structsockaddr { unsignedshortsa_family;//2 bytes address family, AF_xxxcharsa_data[14];//14 bytes of protocol address};structsockaddr_in {shortsin_family;//2 bytes e.g. AF_INET, AF_INET6un...
最近在看网络编程部分内容,刚开始接触结构体struct sockaddr和struct sockaddr_in的时候,极其迷惑,在网上翻了不少帖子,慢慢有那么点清晰了。呵呵,现在结合一篇网友的文章,对这两个结构体进行解读。 在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下: ...
SOCKADDR_IN sockAddr; memset(&sockAddr,0,sizeof(sockAddr)); char lpszAscii[MAX_PATH]; memset(lpszAscii,0,MAX_PATH); //得到机器名 if(gethostname(lpszAscii,MAX_PATH)!=0) { DWORD nError=GetLastError(); return; } m_strComputerName ...
各个参数以及含义可以参照《Linux下网络相关结构体 struct addrinfo》。此外,其属性ai_addr即包含了地址信息。sockaddr类型的简介,可以参考《sockaddr和sockaddr_in详解》。 由于一个域名可以对应多个IP地址,addrinfo也就支持了这个场景。addrinfo通过链表的方式存储其他地址的,可以遍历其属性ai_next获得。
1 生成所需套接字,并绑定一个sockaddr结构 先来看如何生成一个AF_NETLINK族套接字: sockfd = socket(AF_NETLINK, socket_type, netlink_faimly); 这里socket_type可选SOCK_DGRAM或SOCK_RAW;因为AF_NETLINK族是面向数据报的套接字,所以不能使用SOCK_STREAM。
struct sockaddr_nl { sa_family_t nl_family; /*AF_NETLINK*/ unsigned short nl_pad; /* 0 */ pid_t nl_pid; /* 进程pid */ u_32 nl_groups; /* 多播组掩码*/ }nl; 这个结构一般按照注释填好就可以了,nl_groups我也不知道怎么用,一般填零了,表示没有多播。绑定: ...
1.创建一个struct socket结构体: int sock_create(int family, int type, int protocol, struct socket **res); int sock_create_kern(int family, int type, int protocol, struct socket **res); EXPROT_SYMBOL(sock_create); EXPROT_SYMBOL(sock_create_kern); ...