首页 > 代码库 > WSAStartup( )

WSAStartup( )

这里用通俗的语言解释一下这个函数,就类似于opencv一样,要添加链接库函数,cv.lib等,要添加到附加依赖项,或者通过#pragma comment(lib,”cv.lib“)一样,然后才能包含头文件进行各种函数的调用。当然了,socket编程要调用各种socket函数,但是需要库Ws2_32.lib和头文件Winsock2.h,这里的WSAStartup就是为了向操作系统说明,我们要用哪个库文件,让该库文件与当前的应用程序绑定,从而就可以调用该版本的socket的各种函数了。

头文件 header:  Winsock2.h

库library:      Ws2_32.lib
原型:int  PASCAL   FAR WSAStartup (WORD  wVersionRequested, LPWSADATA  lpWSAData );
参数:wVersionRequested是Windows Sockets API提供的调用方可使用的最高版本号。高位字节指出副版本(修正)号,低位字节指明主版本号。
       lpWSAData 是指向WSADATA数据结构的指针,用来接收WindowsSockets实现的细节。

WSADATA数据类型:这个结构被用来存储被WSAStartup函数调用后返回的 WindowsSockets数据。它包含Winsock.dll执行的数据。

  结构原型:  

struct WSAData {

  WORDwVersion;

  WORDwHighVersion;

  charszDescription[WSADESCRIPTION_LEN+1];

  charszSystemStatus[WSASYSSTATUS_LEN+1];

  unsigned shortiMaxSockets;

  unsigned shortiMaxUdpDg;

  char*lpVendorInfo;};

  WSADATA结构被用来保存函数WSAStartup返回的WindowsSockets初始化信息。

  成员:

  wVersion

  Windows SocketsDLL期望调用者使用的Windows Sockets规范的版本。 高位字节存储副版本号,低位字节存储主版本号,可以用WORD MAKEWORD(BYTE,BYTE ) 返回这个值,例如:MAKEWORD(1,1)

  wHighVersion

  这个DLL能够支持的WindowsSockets规范的最高版本。通常它与wVersion相同。

  szDescription

  以null结尾的ASCII字符串,Windows SocketsDLL将对Windows Sockets实现的描述拷贝到这个字符串中,包括制造商标识。文本(最多可以有256个字符)可以包含任何字符,但是要注意不能包含控制字符和格式字符,应用程序对其最可能的使用方式是把它(可能被截断)显示在在状态信息中。

  szSystemStatus

  以null结尾的ASCII字符串,Windows SocketsDLL把有关的状态或配置信息拷贝到该字符串中。WindowsSockets DLL应当仅在这些信息对用户或支持人员有用时才使用它们,它不应被作为szDescription域的扩展。

  iMaxSockets

  单个进程能够打开的socket的最大数目。WindowsSockets的实现能提供一个全局的socket池,可以为任何进程分配;或者它也可以为socket分配属于进程的资源。这个数字能够很好地反映WindowsSockets DLL或网络软件的配置方式。应用程序的编写者可以通过这个数字来粗略地指明WindowsSockets的实现方式对应用程序是否有用。例如,XWindows服务器在第一次启动的时候可能会检查iMaxSockets的值:如果这个值小于8,应用程序将显示一条错误信息,指示用户重新配置网络软件(这是一种可能要使用szSystemStatus文本的场合)。显然无法保证某个应用程序能够真正分配iMaxSockets个socket,因为可能有其它WindowsSockets应用程序正在使用。

  iMaxUdpDgWindows Sockets应用程序能够发送或接收的最大的用户数据包协议(UDP)的数据包大小,以字节为单位。如果实现方式没有限制,那么iMaxUdpDg为零。在Berkeleysockets的许多实现中,对于UDP数据包有个固有的限制(在必要时被分解),大小为8192字节。WindowsSockets的实现可以对碎片重组缓冲区的分配作出限制。对于适合的WindowsSockets 实现,iMaxUdpDg的最小值为512。注意不管iMaxUdpDg的值是什么,都不推荐你发回一个比网络的最大传送单元(MTU)还大的广播数据包。(Windows SocketsAPI 没有提供发现MTU的机制,但是它不会小于512个字节)。WinSock2.0版中已被废弃。

  lpVendorInfo 指向销售商的数据结构的指针。这个结构的定义(如果有)超出了WindowsSockets规范的范围。WinSock2.0版中已被废弃。

其实说白了wsastartup主要就是进行相应的socket库绑定。