35 网络相关函数(三)——live555源码阅读(四)网络
2015年08月12日- NoReuse::NoReuse(UsageEnvironment& env)
- fEnv(env) { groupsockPriv(fEnv)->reuseFlag = 0; }
只要env.groupsockPriv->socketTable==NULL
成立,就释放env.groupsockPriv
指向对象。
// 若groupsockPriv对象的socketTable==NULL // 析构的时候为env.groupsockPriv释放对象 NoReuse::~NoReuse() { groupsockPriv(fEnv)->reuseFlag = 1; reclaimGroupsockPriv(fEnv); }
这个函数只用于windows
系列操作系统。
windows
网络编程是一件麻烦事,其必须要先进行一系列初始化
的操作。
如果不是windows平台,这个函数会被宏替换为1
,就是说必然成功。
1 #if defined(WIN32) || defined(_WIN32) 2 #ifndef IMN_PIM 3 #define WS_VERSION_CHOICE1 0x202/MAKEWORD(2,2)/ 4 #define WS_VERSION_CHOICE2 0x101/MAKEWORD(1,1)/ 5 int initializeWinsockIfNecessary(void) { 6 /* We need to call an initialization routine before 7 * we can do anything with winsock. (How fucking lame!): 8 我们需要调用初始化例程 9 之后我们可以用Winsock做任何事。(怎么他妈的没用的!): 10 / 11 static int _haveInitializedWinsock = 0; 12 WSADATA wsadata; 13 14 if (!_haveInitializedWinsock) { 15 if ((WSAStartup(WS_VERSION_CHOICE1, &wsadata) != 0) 16 && ((WSAStartup(WS_VERSION_CHOICE2, &wsadata)) != 0)) { 17 return 0; / error in initialization / 18 } 19 if ((wsadata.wVersion != WS_VERSION_CHOICE1) 20 && (wsadata.wVersion != WS_VERSION_CHOICE2)) { 21 WSACleanup(); 22 return 0; / desired Winsock version was not available */ 23 } 24 _haveInitializedWinsock = 1; 25 } 26 27 return 1; 28 } 29 #else 30 int initializeWinsockIfNecessary(void) { return 1; } 31 #endif 32 #else 33 #define initializeWinsockIfNecessary() 1 34 #endif
yle=“color: #008000;“>/ 18 } 19 if ((wsadata.wVersion != WS_VERSION_CHOICE1) 20 && (wsadata.wVersion != WS_VERSION_CHOICE2)) { 21 WSACleanup(); 22 return 0; / desired Winsock version was not available */ 23 } 24 _haveInitializedWinsock = 1; 25 } 26 27 return 1; 28 } 29 #else 30 int initializeWinsockIfNecessary(void) { return 1; } 31 #endif 32 #else 33 #define initializeWinsockIfNecessary() 1 34 #endif