系统相关
首页 > 系统相关> > 【Socket编程】基于windows的套接字相关结构体

【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