35 网络相关函数(三)——live555源码阅读(四)网络

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
原文地址:https://www.cnblogs.com/oloroso/p/4724037.html