当前页面链接:https://www.cnblogs.com/oloroso/p/4724037.html

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

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

本文由乌合之众 lym瞎编,欢迎转载 blog.cnblogs.net/oloroso
本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso

简介#

网络相关函数是一系列用于操作网络数据的函数。在多个文件中都有相关的函数的定义。还有一些函数是系统socket API相关函数,就不提了。
   这一系列的函数大多有一个特点,需要一个UsageEnvironmet&型的参数。
   这些方法大多在live555sourcecontrol\groupsock\include\GroupsockHelper.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
复制代码

 

posted @   乌合之众  阅读(740)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
clear
点击右上角即可分享
微信分享提示
CONTENTS