【Socket编程】基于windows的套接字相关结构体
作者:互联网
WSADATA结构体
一种数据结构,这个结构被用来存储被WSAStartup函数调用后返回的[Windows Sockets](https://baike.baidu.com/item/Windows Sockets)数据。它包含Winsock.dll执行的数据。
//摘自<winsock.h>
typedef struct WSAData {
WORD wVersion;
WORD wHighVersion;
#ifdef _WIN64
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR * lpVendorInfo;
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
#else
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR * lpVendorInfo;
#endif
} WSADATA;
WSADATA结构被用来保存AfxSocketInit函数返回的WindowsSockets初始化信息。
SOCKET结构体
用户使用socket系统调用编写应用程序时,通过一个数字来表示一个socket,所有的操作都在该数字上进行,这个数字称为套接字描述符。在系统调用的实现函数里,这个数字就会被映射成一个表示socket的结构体,该结构体保存了该socket的所有属性和数据。在内核的协议中实现中,关于表示 socket的结构体.
struct socket
这是一个基本的BSD socket,我们调用socket系统调用创建的各种不同类型的socket,开始创建的都是它,到后面,各种不同类型的socket在它的基础上进行 各种扩展。struct socket是在虚拟文件系统上被创建出来的,可以把它看成一个文件,是可以被安全地扩展的。
//下面是其完整定义:
struct socket{
socket_state state;//the state of socket
unsigned long flags;
const struct proto_ops *ops;
struct fasync_struct *fasync_list;
struct file *file;
struct sock *sk;
wait_queue_head_t wait;
short type;
};
sockaddr 、sockaddr_in结构体
struct sockaddr{
sa_family_t sa_familay; //地址族,最常用的是"AF_INET"(IPV4)和"AF_INET6"(IPV6);
char sa_data[14]; //包含套接字中的目标地址和端口信息;
};
sockaddr的缺陷:sa_data把目标地址和端口号混在一起了,于是,有了如下的改进
//在netinet/in.h中定义
struct sockaddr_in{
sa_family_t sin_family;//地址族,常用AF_INET
uint16_t sin_port;//16位TCP/UDP端口号
struct in_addr sin_addr;//32位IP地址
char sin_zero[8];//无用,为了保持和sockadd的大小一样
};
struct in_addr{
in_addr_t s_addr;//32位IPV4地址
}
标签:sockaddr,struct,windows,unsigned,char,socket,addr,接字,Socket 来源: https://www.cnblogs.com/zynu11/p/15960037.html