ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

【Socket编程】基于windows的套接字相关结构体

2022-03-03 15:31:55  阅读:188  来源: 互联网

标签:sockaddr struct windows unsigned char socket addr 接字 Socket


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有