winsock 常用数据结构

来源:互联网 发布:金蝶java面试题 编辑:程序博客网 时间:2024/05/22 10:56

在VC的头文件winsock.h和winsock2.h中定义了许多常数、变量类型和数据结构。现介绍一些常见的。

 

1WSAData动态链接库关联的数据结构(winsock2.h中的定义,winsock.h中的定义类似)

#defineWSADESCRIPTION_LEN   256

#defineWSASYS_STATUS_LEN 128

typedef struct  WSAData {  

WORD   wVersion;      //winsock版本          

WORD   wHighVersion;   //系统可以支持的最高版本        

char  szDescription[WSADESCRIPTION_LEN+1]; //可能需要的winsock信息(最多256个的非终止字符串)

char  szSystemStatus[WSASYS_STATUS_LEN+1]; //状态和配置信息;       

unsignedshort   iMaxSockets;   //预留后向兼容的,版本2不用的        

unsignedshort   iMaxUdpDg;   //同上,预留用于后向兼容        

charFAR *  lpVendorInfo;      //同上 

}WSADATA, FAR * LPWSADATA;  

 

2sockaddr用于说明网络寻址信息的地址结构:

struct sockaddr {        

u_short  sa_family;  // address family , AF_INET表示套接字处于Internet域      

char    sa_data[14];  //* up to 14 bytes of direct address

};  

 

3) sockaddr_in

struct sockaddr_in {         

short   sin_family;         

u_short sin_port;   //两个字节服务端口地址,缺省为0时自动分配,1024~5000之间的数值,网络字节顺序

struct  in_addr  sin_addr;  //四字节IP地址,无符号类型         

char  sin_zero[8];        //与sockaddr结构sa_data字段的长度保留一致,只充当填充项的作用

 };

 

4) _SOCKET_ADDRESS

Typedef struct  _SOCKET_ADDRESS{    

LPSOCKADDRlpSockaddr   //指向套接字地址    

INTiSockaddrLength        //套接字地址长度(字节) 

}SOCKET_ADDRESS, *PSOCKET_ADDRESS, FAR * LPSOCKET_ADDRESS 

 

5) in_addr

typedefstruct in_addr {        

union{                 

struct{          

UCHARs_b1,s_b2,s_b3,s_b4;  

}S_un_b;                 

struct{          

USHORTs_w1,s_w2;  

}S_un_w;                 

ULONGS_addr;               

}S_un; 

#defines_addr  S_un.S_addr         // can be used for most tcp & ipcode

#defines_host  S_un.S_un_b.s_b2    // host on imp

#defines_net   S_un.S_un_b.s_b1    // network

#defines_imp  S_un.S_un_w.s_w2    // imp #define s_impno S_un.S_un_b.s_b4//imp # 

#defines_lh    S_un.S_un_b.s_b3    // logical host

}IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;  

 

6) hosten 用于存放或返回主机信息的hosten结构:

struct  hostent {         

char   FAR * h_name;   // official name of host,域名系统可返回应答       

char   FAR * FAR * h_aliases;  // alias list 多名数组        

short   h_addrtype;      //host address type 返回的地址类型        

short   h_length;        // length of address 返回的地址长度(字节)       

char    FAR * FAR * h_addr_list;   // list of addresses 用于主机网络字节顺序的地址表  #define h_addr  h_addr_list[0]      //address, for backward compat

};   

 

7) servent用于存放或返回给定服务名字的服务名和服务号的servent结构:

struct  servent {

char    FAR * s_name;         //officialservice name 服务的官方名字     

char    FAR * FAR * s_aliases;  // alias list 非空字符的别名数组      

short   s_port;                 //port # 网络顺序的服务对应的端口号      

char    FAR * s_proto;          // protocol to use 服务应用的协议名

};

 

8) protoent用于存放或返回给定协议信息的protoent结构:

struct  protoent {         

char    FAR * p_name;         //officialprotocol name 协议的官方名字        

char    FAR * FAR * p_aliases;  // alias list 非空字符的别名数组      

short   p_proto;               // protocol # 主机顺序的协议号

};   

 

9) fd_seand timeval 用于select()函数的套接字分类fd_set和timeval结构:

typedefstruct fd_set {         

u_int      fd_count;    // how many are SET?集合中套接字个数     

SOCKET  fd_array[FD_SETSIZE];  // an array of SOCKETs 在集合中的套接字数组,其中FD_SETSIZE=64

}fd_set;  

 

structtimeval {         

long    tv_sec;     //seconds 等待时间秒        

long    tv_usec;    //and microseconds 等待时间微秒

};

 

10) WSABUF 允许对数据缓冲区创建和操作的WSABUF结构:

typedefstruct _WSABUF {     

u_long      len;    // the length of the buffer,字节为单位  

charFAR *  buf;     // the pointer to the buffer

}WSABUF, FAR * LPWSABUF;

 

11) WSANETWORKEVENTS 存储套接字网络事件内部信息

Typedef struct  _WSANETWORKEVENTS {       

long  lNetworkEvents;            

int   iErrorCode[FD_MAX_EVENTS]; 

}WSANETWORKEVENTS, FAR * LPWSANETWORKEVENTS;

lNetworkEvents 参数:指定了一个值,对应于套接字上发生的所有网络事件类型(FD_READ、FD_WRITE 等)。注意:一个事件进入传信状态时,可能会同时发生多个网络事件类型。例如,一个繁忙的服务器应用可能同时收到 FD_READ 和 FD_WRITE 通知。

iErrorCode 参数:指定的是一个错误代码数组,同 lNetworkEvents 中的事件关联在一起。针对每个网络事件类型,都存在着一个特殊的事件索引,名字与事件类型的名字类似,只是要在事件名字后面添加一个“_BIT”后缀字串即可。例如,对 FD_READ 事件类型来说,iErrorCode 数组的索引标识符便是 FD_READ_BIT。

原创粉丝点击