亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? distnetlib.c

?? vxworks操作系統(tǒng)的源代碼 供研究學(xué)習(xí)
?? C
?? 第 1 頁 / 共 2 頁
字號:
         * the window rotating.         */        if (pServNode->servUp == FALSE)            return (OK);        semTake (&pServNode->servQLock, WAIT_FOREVER);        DIST_TBUF_HDR_ENQUEUE (pServNode->pServQ, pDeliver);        semGive (&pServNode->servQLock);        semGive (&pServNode->servWait4Jobs);        return (OK);        }    return (ERROR);    }/***************************************************************************** distNetCtl - control function for network layer (VxFusion option)** This routine performs control functions on the network layer.* The following functions are accepted:* \is* \i DIST_CTL_SERVICE_HOOK* Set a function to be called, each time a service called by a* remote node fails.* \i DIST_CTL_SERVICE_CONF* Unsed to configure a certain service. The <argument> parameter is* a pointer to DIST_SERV_CONF, which holds the service id and its* configuration to set.* \ie** RETURNS: Return value of function called, or ERROR.** ERRNO:* S_distLib_UNKNOWN_REQUEST** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** NOMANUAL*/int distNetCtl    (    int    function,        /* function code      */    int    argument         /* arbitrary argument */    )    {    DIST_SERV_CONF    *pServConfig;    switch (function)        {        case DIST_CTL_SERVICE_HOOK:            distNetServiceHook = (FUNCPTR) argument;            return (OK);        case DIST_CTL_SERVICE_CONF:            {            if ((pServConfig = (DIST_SERV_CONF *) argument) == NULL)                return (ERROR);                    return (distNetServConfig (pServConfig->servId,                    pServConfig->taskPrio, pServConfig->netPrio));            }        default:            errnoSet (S_distLib_UNKNOWN_REQUEST);            return (ERROR);        }    }/***************************************************************************** distNetSend - send message from a continuous buffer to the network (VxFusion option)** This routine sends a message of length <nBytes> starting at <buffer>* to node <distNodeDest>. If necessary, the message is fragmented.** The routine blocks until the message is acknowledged or timeout* has expired.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: OK, if successful.* NOMANUAL*/STATUS distNetSend    (    DIST_NODE_ID nodeIdDest,  /* node to which message is destinated */    DIST_PKT *   pPkt,        /* packet to send                      */    UINT         nBytes,      /* length of message                   */    int          timo,        /* ticks to wait                       */    int          prio         /* priority level to send message on   */    )    {    char *          pFrag;    char *          pBufEnd;    DIST_TBUF *     pTBuf;    DIST_TBUF_HDR * pTBufHdr;    int             mtu;    int             tBufNBytes;    short           seq = 0;    distStat.netOutReceived++;    if (nodeIdDest == DIST_IF_BROADCAST_ADDR &&            distNodeGetNumNodes (DIST_NODE_NUM_NODES_ALIVE) <= 1)        return (OK);    pPkt->pktLen = htons ((UINT16)nBytes);    /* Get first TBuf for header. */    if ((pTBufHdr = DIST_TBUF_HDR_ALLOC ()) == NULL)        {        distStat.netOutDiscarded++;        return (ERROR);                /* out of TBufs */        }    pTBufHdr->tBufHdrDest = nodeIdDest;    pTBufHdr->tBufHdrOverall = (INT16) nBytes;    pTBufHdr->tBufHdrTimo = timo;    pTBufHdr->tBufHdrPrio = prio;    /* Split the packet to n telegrams and copy them to TBufs. */    pBufEnd = (pFrag = (char *) pPkt) + nBytes;    mtu = DIST_IF_MTU - DIST_IF_HDR_SZ;    while ((pTBuf = DIST_TBUF_ALLOC ()) != NULL)        {        DIST_TBUF_ENQUEUE (pTBufHdr, pTBuf);        tBufNBytes = MIN (pBufEnd - pFrag, mtu);        pTBuf->tBufFlags = DIST_TBUF_FLAG_MF;        if (seq == 0)            pTBuf->tBufFlags |= DIST_TBUF_FLAG_HDR;        if (nodeIdDest == DIST_IF_BROADCAST_ADDR)            {            pTBuf->tBufType = DIST_TBUF_TTYPE_BDTA;            pTBuf->tBufFlags |= DIST_TBUF_FLAG_BROADCAST;            }        else            pTBuf->tBufType = DIST_TBUF_TTYPE_DTA;        pTBuf->tBufSeq = seq++;        pTBuf->tBufNBytes = (UINT16) tBufNBytes;        bcopy (pFrag, pTBuf->pTBufData, tBufNBytes);        pFrag += tBufNBytes;        if (pFrag == pBufEnd)    /* done? */            {            pTBuf->tBufFlags &= ~DIST_TBUF_FLAG_MF;#ifdef DIST_NET_REPORT            printf ("distNetSend:%p: node %lu, numSeq %d, lenOverall %d\n",                    pTBufHdr, nodeIdDest, seq, pTBufHdr->tBufHdrOverall);#endif            return (distNodePktSend (pTBufHdr));            }        }    /* TBuf shortage */    DIST_TBUF_FREEM (pTBufHdr);    distStat.netOutDiscarded++;    return (ERROR);        }/***************************************************************************** distNetIOVSend - send message from discontinuous buffer to the network (VxFusion option)** This routine sends a message from a scatter/gather buffer (IOV)* to node <nodeIdDest>. If necessary, the message is fragmented.** This routine blocks until the message is acknowledged or timeout* has exceeded.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: OK, if successful.* NOMANUAL*/STATUS distNetIOVSend    (    DIST_NODE_ID  nodeIdDest, /* node to which message is destinated */    DIST_IOVEC *  pIOV,       /* list of buffers to gather           */    int           numIOV,     /* number of buffers                   */    int           timo,       /* ticks to wait                       */    int           prio        /* priority level to send message on   */    )    {    DIST_IOVEC *    p;    DIST_TBUF_HDR * pTBufHdr;    DIST_TBUF *     pTBuf = NULL;    DIST_PKT *      pPkt;    int             szSrc, szDest, sz;    int             seq;    char *          pSrc;    char *          pDest = NULL;    distStat.netOutReceived++;    if (numIOV <= 0)        return (ERROR);    if (nodeIdDest == DIST_IF_BROADCAST_ADDR              &&        distNodeGetNumNodes (DIST_NODE_NUM_NODES_ALIVE) <= 1)        {        return (OK);        }    /* Get first TBuf for header. */    if ((pTBufHdr = DIST_TBUF_HDR_ALLOC ()) == NULL)        {        distStat.netOutDiscarded++;        return (ERROR);        }    pTBufHdr->tBufHdrDest = nodeIdDest;    pTBufHdr->tBufHdrTimo = timo;    pTBufHdr->tBufHdrPrio = prio;    pTBufHdr->tBufHdrOverall = 0;    /* later */    /* Copy the discontinious buffer to a list of tBufs. */    p = pIOV;    szDest = 0;    seq = 0;    while (numIOV--)        {        pTBufHdr->tBufHdrOverall += (szSrc = p->IOLen);        pSrc = p->pIOBuffer;        do            {            if (szDest == 0)                {                if ((pTBuf = DIST_TBUF_ALLOC ()) == NULL)                    {                    distStat.netOutDiscarded++;                    DIST_TBUF_FREEM (pTBufHdr);                    return (ERROR);                    }                pTBuf->tBufFlags = 0;                if (seq == 0)                    pTBuf->tBufFlags |= DIST_TBUF_FLAG_HDR;                pTBuf->tBufFlags |= DIST_TBUF_FLAG_MF;                if (nodeIdDest == DIST_IF_BROADCAST_ADDR)                    {                    pTBuf->tBufType = DIST_TBUF_TTYPE_BDTA;                    pTBuf->tBufFlags |= DIST_TBUF_FLAG_BROADCAST;                    }                else                    pTBuf->tBufType = DIST_TBUF_TTYPE_DTA;                pTBuf->tBufSeq = (UINT16) seq++;                pTBuf->tBufNBytes = 0;                DIST_TBUF_ENQUEUE (pTBufHdr, pTBuf);                szDest = DIST_IF_MTU - DIST_IF_HDR_SZ;                pDest = pTBuf->pTBufData;                }            sz = MIN (szSrc, szDest);            bcopy (pSrc, pDest, sz);            pTBuf->tBufNBytes += sz;            szSrc -= sz;            szDest -= sz;            pSrc += sz;            pDest += sz;            }        while (szSrc > 0);        p++;        }    pTBuf->tBufFlags &= ~DIST_TBUF_FLAG_MF;#ifdef DIST_NET_REPORT    printf ("distNetSend:%p: node %lu, numSeq %d, lenOverall %d\n",            pTBufHdr, nodeIdDest, seq, pTBufHdr->tBufHdrOverall);#endif    pPkt = (DIST_PKT *) ((DIST_TBUF_GET_NEXT (pTBufHdr))->pTBufData);    pPkt->pktLen = htons (pTBufHdr->tBufHdrOverall);    return (distNodePktSend (pTBufHdr));    }/***************************************************************************** distNetInput - accept a telegram buffer and send it to upper VxFusion layers (VxFusion option)** This routine accepts a telegram buffer from an adapter and tries to * reassemble a message from it.  If the telegram buffer contains an entire * message, distNetInput() simply forwards the message to the upper VxFusion * layers and sends an acknowledgment for the message.  If the telegram buffer * contains a message fragment, the message fragment is added to existing * message fragments, if any.  If the message fragment completes a message, the * message is forwarded to the upper VxFusion layers and distNetInput() * sends an acknowledgment for the message.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: N/A* NOMANUAL*/void distNetInput    (    DIST_NODE_ID nodeIdIn, /* source node of the telegram buffer */    int          prioIn,   /* priority the telegram arrived with */    DIST_TBUF *  pTBufIn   /* the telegram buffer itself         */    )    {    void * pComm; /* from distNodeReassemble(), to distNodeGetReassembled() */    DIST_TBUF_HDR *  pReassembled;    DIST_PKT *       pPkt;    distStat.netInReceived++;    /* Try to reassemble. */        if ((pComm = distNodeReassemble (nodeIdIn, prioIn, pTBufIn)) == NULL)        return;    /*     * Now that we are here, a packet has been reassembled.     * <pComm> points to the communication, that has one or     * more packets.     */    while ((pReassembled = distNodeGetReassembled (pComm)) != NULL)        {#ifdef DIST_NET_REPORT            {            char * buffer;            int    len;            printf ("distNetInput: packet %p reassembled\n", pReassembled);            buffer = malloc ((len = pReassembled->tBufHdrOverall));            if (buffer)                {                distTBufCopy (DIST_TBUF_GET_NEXT (pReassembled), 0,                        buffer, len);                distDump (buffer, len);                free (buffer);                }            }#endif        distStat.netReassembled++;        pPkt = (DIST_PKT *) ((DIST_TBUF_GET_NEXT (pReassembled))->pTBufData);        if ((ntohs (pPkt->pktLen) != pReassembled->tBufHdrOverall) ||                (distNetServCall (pPkt->pktType, pReassembled) == ERROR))            {#ifdef DIST_DIAGNOSTIC            if (ntohs (pPkt->pktLen) != pReassembled->tBufHdrOverall)                {                distLog("distNetInput: wrong length (has %d, expected %d)\n",                        pReassembled->tBufHdrOverall, ntohs (pPkt->pktLen));                }            else                distLog("distNetInput: unknown type (%d) or service down\n",                        pPkt->pktType);#endif            distNodePktDiscard (pReassembled->tBufHdrSrc, pReassembled);            }        else            distNodePktAck (pReassembled->tBufHdrSrc, pReassembled, 0);        /* loop back for the next packet. */        }    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区日韩一区| 日一区二区三区| 亚洲电影第三页| 国内精品不卡在线| 欧美精品 日韩| 亚洲啪啪综合av一区二区三区| 激情深爱一区二区| 欧美一区二区三区免费在线看| 日韩美女啊v在线免费观看| 国内不卡的二区三区中文字幕| 欧美日本在线播放| 亚洲人成人一区二区在线观看| 国产伦精品一区二区三区免费迷 | 一本一道久久a久久精品| 欧美tk丨vk视频| 视频一区中文字幕国产| 色久优优欧美色久优优| 日韩理论电影院| 99视频在线精品| 中文一区二区完整视频在线观看| 久久99久久99精品免视看婷婷| 在线不卡免费av| 亚洲第四色夜色| 欧美午夜一区二区三区| 亚洲一区二区三区影院| 在线观看亚洲精品视频| 亚洲综合激情另类小说区| 在线观看一区日韩| 亚洲一区av在线| 欧美人妖巨大在线| 国产91精品一区二区麻豆网站| 精品久久久久一区| 韩国女主播成人在线观看| 久久久天堂av| av电影在线不卡| 亚洲人成精品久久久久久| 在线区一区二视频| 日日摸夜夜添夜夜添亚洲女人| 欧美一级精品在线| 另类小说图片综合网| 久久日韩粉嫩一区二区三区| 国产99久久久久| 一区二区在线观看视频 | 亚洲国产中文字幕| 欧美美女喷水视频| 久久99国内精品| 国产调教视频一区| 91免费版在线| 日韩av在线播放中文字幕| 欧美大白屁股肥臀xxxxxx| 国产不卡在线视频| 艳妇臀荡乳欲伦亚洲一区| 777久久久精品| 成人免费视频视频| 亚洲成a人片在线不卡一二三区| 欧美一级高清大全免费观看| 国产高清在线精品| 亚洲制服丝袜av| 精品捆绑美女sm三区| 福利一区在线观看| 视频一区二区中文字幕| 2024国产精品视频| 一本色道久久加勒比精品| 日韩电影在线免费| 综合分类小说区另类春色亚洲小说欧美 | 成人免费毛片app| 性久久久久久久| 欧美高清在线一区| 7777精品伊人久久久大香线蕉的 | 五月激情六月综合| 中文字幕免费一区| 日韩情涩欧美日韩视频| www.综合网.com| 蜜桃视频在线一区| 一区二区三区四区在线播放| 精品久久五月天| 欧美日韩专区在线| 成人黄页在线观看| 久久精品国内一区二区三区| 日韩av不卡在线观看| 国产精品网站导航| 欧美成人伊人久久综合网| 欧美中文字幕一区| 波多野结衣视频一区| 秋霞成人午夜伦在线观看| 又紧又大又爽精品一区二区| 日韩精品在线网站| 欧美另类久久久品| 欧美中文字幕一区二区三区亚洲| 国产91精品一区二区麻豆网站 | 日韩欧美一二区| 欧美日韩中文国产| 一本色道久久加勒比精品| 丰满白嫩尤物一区二区| 极品少妇xxxx精品少妇| 青草av.久久免费一区| 亚洲午夜在线视频| 亚洲天堂2016| 亚洲欧美一区二区三区国产精品 | 亚洲线精品一区二区三区八戒| 欧美高清在线一区| 国产日韩精品一区二区三区| 欧美成人猛片aaaaaaa| 91精品国产乱| 欧美zozozo| 久久这里只有精品6| 精品国产免费一区二区三区四区| 69堂精品视频| 日韩三级免费观看| 欧美xxxxxxxx| 久久久九九九九| 久久精品在线免费观看| 久久嫩草精品久久久精品| 国产夜色精品一区二区av| 国产三级欧美三级日产三级99 | fc2成人免费人成在线观看播放| 国产mv日韩mv欧美| av中文字幕不卡| 在线中文字幕一区二区| 欧美欧美午夜aⅴ在线观看| 欧美日本在线播放| 精品国产一区二区三区不卡| 欧美大片拔萝卜| 国产精品网友自拍| 亚洲狠狠丁香婷婷综合久久久| 午夜久久久久久久久久一区二区| 亚洲午夜免费电影| 日韩—二三区免费观看av| 国产精品一区二区免费不卡| 白白色 亚洲乱淫| 欧美日韩在线亚洲一区蜜芽| 4438x亚洲最大成人网| 2021中文字幕一区亚洲| 综合欧美一区二区三区| 午夜欧美电影在线观看| 韩国中文字幕2020精品| 成人黄色小视频| 欧美性猛交xxxx乱大交退制版 | 久久99精品国产麻豆不卡| 成人在线一区二区三区| 色94色欧美sute亚洲线路二| 欧美日韩免费不卡视频一区二区三区| 欧美一区二区三区视频在线观看| 久久综合丝袜日本网| 亚洲理论在线观看| 精品一区二区三区视频在线观看| 高清在线观看日韩| 91 com成人网| 国产精品久久久久久久久免费樱桃| 亚洲最大成人网4388xx| 国内精品伊人久久久久av一坑| 91免费小视频| 久久久久久久久久久久久夜| 亚洲激情第一区| 国产一区美女在线| 欧美三级日韩三级| 欧美国产一区二区在线观看| 五月天激情综合| 91首页免费视频| 国产欧美日韩麻豆91| 亚洲r级在线视频| 91在线视频在线| 久久理论电影网| 日本不卡视频在线| 欧美亚洲另类激情小说| 日本一区二区成人| 精品一区二区三区在线观看国产| 色欧美乱欧美15图片| 国产精品午夜春色av| 麻豆精品在线播放| 欧美日韩色综合| 一区二区三区四区在线免费观看| 国产91精品精华液一区二区三区 | 成人免费视频视频在线观看免费| 欧美精品第一页| 亚洲小少妇裸体bbw| 成人成人成人在线视频| 久久嫩草精品久久久精品| 日本伊人精品一区二区三区观看方式| 91视频观看免费| 国产精品入口麻豆九色| 国产精品18久久久| 日韩午夜激情视频| 美女国产一区二区三区| 欧美区在线观看| 五月天激情综合| 91精品国模一区二区三区| 亚洲一区欧美一区| 欧美无乱码久久久免费午夜一区 | 亚洲欧美精品午睡沙发| www.亚洲人| 国产精品美女久久久久av爽李琼| 国模少妇一区二区三区| 欧美大肚乱孕交hd孕妇| 精品午夜一区二区三区在线观看| 日韩午夜在线观看视频| 麻豆91精品视频| 久久综合狠狠综合久久综合88| 精品伊人久久久久7777人| 日韩欧美久久久|