zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    c++ 迷宫问题
    linux下恢复删除的文件
    c++ 分解数2
    c++ 平分石头
    多态
    设计模式中类的6种关系
    工厂方法模式
    设计原则之面向接口编程
    封装、继承
    便利构造器、单件模式
  • 原文地址:https://www.cnblogs.com/oloroso/p/4724037.html
Copyright © 2011-2022 走看看