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
  • 相关阅读:
    Leetcode Binary Tree Preorder Traversal
    Leetcode Minimum Depth of Binary Tree
    Leetcode 148. Sort List
    Leetcode 61. Rotate List
    Leetcode 86. Partition List
    Leetcode 21. Merge Two Sorted Lists
    Leetcode 143. Reorder List
    J2EE项目应用开发过程中的易错点
    JNDI初认识
    奔腾的代码
  • 原文地址:https://www.cnblogs.com/oloroso/p/4724037.html
Copyright © 2011-2022 走看看