【Socket编程】WSAStartup()与WSACleanup()
WSAStartup()
一句话解释:wsastart的功能就是进行相应的socket库绑定
这里用通俗的语言解释一下这个函数,就类似于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数据结构
的指针,用来接收Windows Sockets实现
的细节。
使用Socket的程序在使用Socket之前必须调用WSAStartup函数。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。
当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。该函数执行成功后返回0。
例:假如一个程序要使用2.1版本的Socket,那么程序代码如下
wVersionRequested = MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
WSACleanup()
一句话解释:wsacleanup的功能就是解除与socket库的绑定并且释放socket库所占用的系统资源
int WSACleanup(void)
在Windows下,Socket是以DLL的形式实现的。在DLL内部维持着一个计数器,只有第一次调用WSAStartup才真正装载DLL,以后的调用只是简单的增加计数器,而WSACleanup函数的功能则刚好相反,每调用一次使计数器减1,当计数器减到0时,DLL就从内存中被卸载!因此,你调用了多少次WSAStartup,就应相应的调用多少次的WSACleanup.
参考文章:
WSAStartUp详细的解释为什么首先调用这个函数_用户1259629212_新浪博客 (sina.com.cn)