35 网络相关函数(三)——live555源码阅读(四)网络
本文由乌合之众 lym瞎编,欢迎转载 blog.cnblogs.net/oloroso
本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso
简介
网络相关函数是一系列用于操作网络数据的函数。在多个文件中都有相关的函数的定义。还有一些函数是系统socket API
相关函数,就不提了。
这一系列的函数大多有一个特点,需要一个UsageEnvironmet&型的参数。
这些方法大多在live555sourcecontrolgroupsockincludeGroupsockHelper.hh
中声明。
5)NoReuse不重用地址类
env.groupsockPriv->reuseFlag
成员用于指示在setupDatagramSocket
函数中是否设置允许重用本地地址和端口。
构造的时候为构造的时候为env.groupsockPriv
分配对象,并设置groupsockPriv
对象的reuseFlag=0
即不重用标识。默认情况下reuseFlag==1
,标识可重用。
// 构造的时候为env.groupsockPriv分配对象 // 并设置groupsockPriv对象的reuseFlag=0 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); }
6)initializeWinsockIfNecessary 根据需要初始化winSock
这个函数只用于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