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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? distnodelib.c

?? vxworks的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
                        DIST_TBUF_FREE (pTBufNew);                        return (NULL);                        }                        if (pTBuf->tBufSeq > seq)                        {                        DIST_TBUF_INSERT_AFTER (pReassHdr,                                                pTBufPrev,                                                pTBufNew);                        pReassHdr->tBufHdrNLeaks--;                        break;                        }                    pTBufPrev = pTBuf;                    pTBuf = DIST_TBUF_GET_NEXT (pTBuf);                    }                }            /* The telegram is in the reassembly list now. */            pReassHdr->tBufHdrOverall += nBytes;            /*             * Test if the packet is fully reassembled (there             * are no leaks within the packet and the last             * fragment has the 'more fragments' bit cleared).             */            pTBufLast = DIST_TBUF_GET_LAST (pReassHdr);            if (!pReassHdr->tBufHdrNLeaks && !(DIST_TBUF_HAS_MF (pTBufLast)))                {                /*                 * We have received a complete packet and                 * do not expect to receive more fragments.                 */#ifdef DIST_NODE_REPORT                {                DIST_TBUF    *pFirst = DIST_TBUF_GET_NEXT (pReassHdr);                                /* this is a hack */                                printf ("dist..Reass: packet %d complete (type %d/%d)\n", id,                        *((char *) (pFirst->pTBufData)),                        *((char *) (pFirst->pTBufData) + 1));                }#endif                DIST_NODE_BSET (pCommIn->pCommCompleted, id);                /*                 * Test if the reassembled packet is the one                 * we expect next.                 */                if (pReassHdr->tBufHdrId == pCommIn->commPktNextExpect)                    {                    /*                     * This is the packet, we expect next.                     * Return communication pointer to caller,                     * so that it knows about the job.                     */                    distNodeDbUnlock ();                    return (pCommIn);                    }                }            distNodeDbUnlock ();            return (NULL);            }        pReassHdrPrev = pReassHdr;        pReassHdr = DIST_TBUF_HDR_GET_NEXT (pReassHdr);        }        /*     * This is the first fragment of a new packet. There are either     * more fragments, or this packet is not the one, we are waiting     * for.     */     #ifdef DIST_NODE_REPORT    printf ("dist..Reass: first fragment of new packet\n");#endif    if ((pTBufHdrNew = DIST_TBUF_HDR_ALLOC ()) == NULL)        {        distStat.netInDiscarded++; /* nodeInDiscarded counts pkts discarded */        distNodeDbUnlock ();        DIST_TBUF_FREE (pTBufNew);        return (NULL);        }    pTBufHdrNew->tBufHdrSrc = nodeIdSrc;    pTBufHdrNew->tBufHdrId = id;    pTBufHdrNew->tBufHdrPrio = prio;    pTBufHdrNew->tBufHdrOverall = nBytes;    pTBufHdrNew->tBufHdrNLeaks = seq;    pTBufHdrNew->tBufHdrTimo = WAIT_FOREVER;    /* reassembly timeout */    DIST_TBUF_SET_NEXT (pTBufHdrNew, pTBufNew);    DIST_TBUF_SET_LAST (pTBufHdrNew, pTBufNew);    DIST_TBUF_HDR_INSERT_AFTER (pCommIn->pCommQReass, pReassHdrPrev,        pTBufHdrNew);    if (pCommIn->commPktNextExpect == id)        /* this is the packet we want to deliver next */        pCommIn->pCommQNextDeliver = pTBufHdrNew;    if (seq == 0 && ! hasMf)        {        /* We have received a complete packet in a single telegram. */#ifdef DIST_NODE_REPORT        /* this is a hack */                printf ("dist..Reass: packet %d complete (type %d/%d)\n", id,                *((char *) (pTBufNew->pTBufData)),                *((char *) (pTBufNew->pTBufData) + 1));#endif        DIST_NODE_BSET (pCommIn->pCommCompleted, id);        if (id == pCommIn->commPktNextExpect)            {            /*             * This is the packet, we expect next.             * Return communication pointer to caller,             * so that it knows about the job.             */            distNodeDbUnlock ();            return (pCommIn);            }        }    distNodeDbUnlock ();    /* Check if we have to send negative acknowledges (NACKs). */        if (! DIST_TBUF_IS_BROADCAST (pTBufNew))        {        DIST_TBUF_HDR    *pPrev;        DIST_TBUF        *pLastOfPrev;        /*         * Check if we have received the last fragment of the previous         * packet. We cannot find out how many fragments are missing at         * the end of the packet. So just send a NACK for the successor         * of the last telegram received.         */        if ((pPrev = DIST_TBUF_HDR_GET_PREV (pTBufHdrNew)) != NULL &&                (pLastOfPrev = DIST_TBUF_GET_LAST (pTBufHdrNew)) != NULL &&                DIST_TBUF_HAS_MF (pLastOfPrev))            {            distNodeSendNegAck (pNodeSrc, pPrev->tBufHdrId,                    pLastOfPrev->tBufSeq + 1);            }        /*         * Check if some telegrams from the beginning of the new packet         * are missing. Send a NACK for each of them.         */        if (seq > 0)            {            INT16 i;            for (i = 0; i < seq; i++)                distNodeSendNegAck (pNodeSrc, id, i);            }        }    return (NULL);    }/***************************************************************************** distNodePktSend - send a packet already stored in TBufs (VxFusion option)** This routine waits for an open send window and transmits the packet,* by sending the data of each single TBuf.* Afterwards it blocks for an ACK from the remote node.** NOTE: Takes <distNodeDbLock>.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: OK, if successful.* NOMANUAL*/STATUS distNodePktSend    (    DIST_TBUF_HDR * pTBufHdr    /* message to send */    )    {    DIST_NODE_DB_NODE *  pDistNodeFound;    DIST_TRANSMISSION    distTm;    DIST_NODE_COMM *     pComm;    DIST_NODE_ID         nodeIdDest = pTBufHdr->tBufHdrDest;    DIST_TBUF *          pTBuf;    short                winLo, winHi;    short                pktId;    int                  priority;    int                  wait4NumAcks;    distNodeDbLock ();    distStat.nodeOutReceived++;    if ((pDistNodeFound = distNodeFindById (nodeIdDest)) == NULL)        {#ifdef DIST_DIAGNOSTIC        distLog ("distNodePktSend: unknown node 0x%lx\n", nodeIdDest);#endif        distStat.nodeDBNoMatch++;        distNodeDbUnlock ();        DIST_TBUF_FREEM (pTBufHdr);        return (ERROR);        }    if (! DIST_NODE_IS_ALIVE (pDistNodeFound))        {#ifdef DIST_DIAGNOSTIC        distLog ("distNodePktSend: destination not alive\n");#endif        distStat.nodeNotAlive++;        distNodeDbUnlock ();        DIST_TBUF_FREEM (pTBufHdr);        return (ERROR);        }#ifdef DIST_DIAGNOSTIC    if (DIST_TBUF_GET_NEXT (pTBufHdr) == NULL)        {        distLog ("distNodePktSend: TBuf chain contains no data\n");        }#endif    if (nodeIdDest == DIST_IF_BROADCAST_ADDR)        {        pComm = &pDistNodeFound->nodeBroadcast;        wait4NumAcks = distNodeNumNodesAlive - 1;        }    else        {        pComm = &pDistNodeFound->nodeUnicast;        wait4NumAcks = 1;        }    semBInit (&distTm.tmWait4, SEM_Q_FIFO, SEM_EMPTY);    distTm.tmStatus = DIST_TM_STATUS_OK;    distTm.tmRetmTimo = distNodeRetryTimeout;    distTm.tmNumTm = 1;    distTm.tmAckCnt = wait4NumAcks;    pTBufHdr->pTBufHdrTm = &distTm;    /*     * Each node has two queues for outgoing packets.     * One is the queue for packets that should been     * send, but the "window is closed" (full).     * The other is the queue for packets send, and     * waiting for an ACK.     * In both of the two queues, packets get older.     */    pTBufHdr->tBufHdrId = pktId = pComm->commPktNextSend;    winLo = pComm->commAckNextExpect;    winHi = (INT16) winAdd (pComm->commAckNextExpect, DIST_NODE_WIN_SZ);    /*     * Can we send the packet directly or do we have to wait     * until the "window opens".     */    if (! winWithin (winLo, pktId, winHi))        {        /* Put packet to the WaitToSend queue. */                DIST_TBUF_HDR_ENQUEUE (pComm->pCommQWinOut, pTBufHdr);        distNodeDbUnlock ();    /* unlock before sleep */        /* Wait for a place within the window. */                semTake (&distTm.tmWait4, WAIT_FOREVER);        if (distTm.tmStatus != DIST_TM_STATUS_OK)            {            distNodeDbUnlock ();       /* this is not needed here! */            DIST_TBUF_FREEM (pTBufHdr);            return (ERROR);            /* e.g. timeout, node removed */            }        distNodeDbLock ();                /* Remove it from the WaitToSend queue. */                DIST_TBUF_HDR_UNLINK (pComm->pCommQWinOut, pTBufHdr);        }    pComm->commPktNextSend = (INT16) winAdd (pComm->commPktNextSend, 1);    /* Put packet to the WaitForAck queue and send it. */        DIST_TBUF_HDR_ENQUEUE (pComm->pCommQAck, pTBufHdr);        pTBuf = (DIST_TBUF *) pTBufHdr;    priority = pTBufHdr->tBufHdrPrio;    while ((pTBuf = DIST_TBUF_GET_NEXT (pTBuf)) != NULL)        {        pTBuf->tBufId = pktId;        pTBuf->tBufAck = (UINT16) winSub (pComm->commPktNextExpect, 1);#ifdef DIST_NODE_REPORT        printf ("distNodePktSend:%p: id %d, ack %d, seq %d, len %d, type %d\n",                pTBuf, pTBuf->tBufId, pTBuf->tBufAck, pTBuf->tBufSeq,                pTBuf->tBufNBytes, pTBuf->tBufType);#endif        if (DIST_IF_SEND (nodeIdDest, pTBuf, priority) == ERROR)            {            distNodeDbUnlock ();            DIST_TBUF_HDR_UNLINK (pComm->pCommQAck, pTBufHdr);            DIST_TBUF_FREEM (pTBufHdr);            return (ERROR);            }        pComm->commAckDelayed = FALSE;        }        distNodeDbUnlock ();    /* unlock before sleep */    /* Wait for ACK. */    #ifdef DIST_NODE_REPORT    distLog ("distNodePktSend: sleep while waiting for ACK\n");#endif    semTake (&distTm.tmWait4, WAIT_FOREVER);#ifdef DIST_NODE_REPORT    distLog ("distNodePktSend: awacked: status of tm is %d\n",             distTm.tmStatus);#endif    /*     * distNodePktReass() or distNodeTimer() has already     * dequeued the packet.     */    DIST_TBUF_FREEM (pTBufHdr);    if (distTm.tmStatus != DIST_TM_STATUS_OK)        return (ERROR);                    /* e.g. timeout */    return (OK);    }/***************************************************************************** distNodePktResend - resend a packet (VxFusion option)** Resend a packet already transmitted with distNodePktSend ().** Currently called one place in distNodeDbCommTimer() which* has <distNodeDbLock> taken before it is called.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: OK, if successful.* NOMANUAL*/LOCAL STATUS distNodePktResend    (    DIST_NODE_COMM * pComm,          /* communication channel */    DIST_TBUF_HDR *  pTBufHdr        /* packet to retransmit */    )    {    DIST_TBUF *     pTBuf;    DIST_NODE_ID    nodeIdDest = pTBufHdr->tBufHdrDest;    int             priority = pTBufHdr->tBufHdrPrio;    distStat.nodePktResend++;    pTBuf = (DIST_TBUF *) pTBufHdr;    while ((pTBuf = DIST_TBUF_GET_NEXT (pTBuf)) != NULL)        {        pTBuf->tBufAck = (UINT16) winSub (pComm->commPktNextExpect, 1);#ifdef DIST_NODE_REPORT        printf ("distNodePktResend: resend with ACK for %d (%d)\n",                pTBuf->tBufAck, pComm->commPktNextExpect);#endif        if (DIST_IF_SEND (nodeIdDest, pTBuf, priority) == ERROR)            {            DIST_TBUF_HDR_UNLINK (pComm->pCommQAck, pTBufHdr);            DIST_TBUF_FREEM (pTBufHdr);            return (ERROR);            }        }    return (OK);    }    /***************************************************************************** distNodePktAck - ask for an ACK for a received and consumed packet (VxFusion option)** This routine acknowledeges a packet. If DIST_NODE_ACK_IMMEDIATELY is* not set in <options>, an ACK telegram is not transmitted immediately* but a flag is set. If data is sent to the ACK awaiting node, within a* certain range of time, the ACK is sent within the data telegram.* Else an ACK telegram is transmitted. This is known as `piggy-backing'.* Due to the design, piggy-backing only works for unicasts. For broadcasts,* an ACK is always sent immediately.** NOTE: Takes <distNodeDbLock>.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: OK, if successful.* NOMANUAL*/STATUS distNodePktAck    (    DIST_NODE_ID    nodeIdSrc,  /* source node */    DIST_TBUF_HDR * pPktAck,    /* ack packet */    int             options     /* options */    )    {    DIST_NODE_DB_NODE * pDistNodeFound;    DIST_NODE_COMM *    pComm;    short               id = pPktAck->tBufHdrId;    int                 ackBroadca

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
fc2成人免费人成在线观看播放| 欧美自拍偷拍一区| 亚洲日本一区二区三区| 日韩欧美国产三级电影视频| 色播五月激情综合网| 精品在线一区二区| 亚洲国产成人porn| 国产精品欧美极品| 亚洲精品在线免费观看视频| 欧美日韩电影一区| 91香蕉国产在线观看软件| 久久不见久久见免费视频1| 亚洲一区二区三区自拍| 国产欧美日韩久久| 欧美成人乱码一区二区三区| 欧美男男青年gay1069videost| 成人免费视频国产在线观看| 美女一区二区在线观看| 亚洲国产一区二区三区青草影视| 中文字幕一区二区三区av| 日韩激情中文字幕| 亚洲精品一区二区三区99| 欧美日韩aaaaaa| 一本到三区不卡视频| 国产成人精品免费网站| 久久超碰97中文字幕| 日韩精品亚洲一区| 亚洲高清免费观看| 亚洲一区二区三区影院| 亚洲欧洲精品一区二区三区| 国产日产欧美精品一区二区三区| 欧美xfplay| 欧美电影免费提供在线观看| 91精品国产综合久久久久久久久久| 91麻豆国产香蕉久久精品| 欧美羞羞免费网站| 一本到高清视频免费精品| 9i在线看片成人免费| 成人激情av网| 99re热视频这里只精品| av在线不卡网| 99re这里只有精品视频首页| 99re66热这里只有精品3直播| 成年人国产精品| 成人av在线看| 91免费小视频| 亚洲成人黄色小说| 自拍偷拍亚洲激情| 亚洲综合色在线| 亚洲国产美国国产综合一区二区| 亚洲男女一区二区三区| 亚洲无人区一区| 日韩av一二三| 国产一区在线不卡| 成人av一区二区三区| av亚洲精华国产精华精| 色综合久久99| 欧美精品丝袜中出| 精品国产一区二区三区四区四| 亚洲精品一区二区三区影院| 国产色产综合产在线视频| 国产精品传媒入口麻豆| 亚洲成人资源网| 国产真实乱子伦精品视频| 高清不卡在线观看| 在线一区二区三区| 91精品国产入口在线| 久久久久久麻豆| 亚洲精品成人少妇| 麻豆精品久久久| www.日韩大片| 7777精品伊人久久久大香线蕉完整版 | 久久久精品黄色| 国产精品毛片大码女人| 一区二区三区**美女毛片| 日韩黄色在线观看| 国产精品亚洲成人| 91福利视频网站| 欧美精品一区二区三区在线| 日韩美女视频一区二区| 免费人成黄页网站在线一区二区| 国产伦精品一区二区三区视频青涩| 99热国产精品| 日韩欧美123| 亚洲欧美韩国综合色| 另类欧美日韩国产在线| 99精品欧美一区二区三区小说| 欧美一区二区人人喊爽| 国产精品麻豆欧美日韩ww| 男人的j进女人的j一区| 99国产精品视频免费观看| 精品剧情在线观看| 亚洲成人激情综合网| 国产一区二区三区在线看麻豆| 欧美成人a∨高清免费观看| 久久精品一区八戒影视| 亚洲国产精品欧美一二99| 国产剧情一区二区| 色88888久久久久久影院按摩| 精品处破学生在线二十三| 亚洲精品国产品国语在线app| 美女网站色91| 色88888久久久久久影院野外| 精品对白一区国产伦| 国产精品成人免费精品自在线观看| 天天操天天干天天综合网| 国产精品中文有码| 欧美日韩aaaaaa| 亚洲天堂av一区| 国产资源精品在线观看| 欧美一区二区三区系列电影| 亚洲色欲色欲www| 韩国v欧美v日本v亚洲v| 欧美亚洲国产怡红院影院| 国产精品天干天干在观线| 麻豆精品在线播放| 日韩欧美中文字幕制服| 亚洲影视在线播放| 欧美妇女性影城| 中文字幕中文字幕一区二区| 麻豆91精品视频| 国产99久久精品| 久久噜噜亚洲综合| 日韩在线一二三区| 欧美日韩国产精品自在自线| 色婷婷亚洲精品| 久久久欧美精品sm网站| 天天色综合成人网| 91官网在线观看| 亚洲日本va在线观看| 国产在线视频精品一区| 欧美一级片在线看| 一卡二卡三卡日韩欧美| 成人av网站在线观看免费| 国产亚洲综合av| 国产乱子伦视频一区二区三区| 日韩一区二区在线看| 污片在线观看一区二区| 欧美自拍偷拍午夜视频| 亚洲精品国产视频| 色婷婷综合久久久中文字幕| 玉足女爽爽91| 在线国产亚洲欧美| 亚洲一区二区在线免费看| 91浏览器打开| 亚洲黄色在线视频| 欧美猛男男办公室激情| 午夜一区二区三区视频| 欧美日免费三级在线| 亚洲一区免费观看| 欧美另类久久久品| 精品一区二区免费| 2020国产精品自拍| 国产成人aaa| 日韩av电影天堂| 国产福利一区在线观看| 久久免费视频一区| 国产成人综合视频| 日韩视频国产视频| 国产精品77777| 国产精品乱人伦中文| 91蜜桃免费观看视频| 亚洲码国产岛国毛片在线| 欧美日韩一区三区| 免费观看在线色综合| www国产精品av| jlzzjlzz国产精品久久| 亚洲综合另类小说| 欧美一级黄色片| 国产一区二区精品在线观看| 国产清纯白嫩初高生在线观看91 | 日韩电影在线观看一区| 日韩欧美成人一区二区| 国产福利精品一区| 亚洲激情六月丁香| 91精品婷婷国产综合久久性色| 麻豆精品精品国产自在97香蕉| 久久久亚洲国产美女国产盗摄 | 一区二区视频在线| 91色婷婷久久久久合中文| 日本免费新一区视频| 2020日本不卡一区二区视频| 本田岬高潮一区二区三区| 亚洲在线中文字幕| 精品国产乱码久久久久久1区2区| va亚洲va日韩不卡在线观看| 亚洲精品午夜久久久| 日韩欧美中文一区二区| 成人动漫精品一区二区| 一区二区在线观看视频在线观看| 精品久久国产字幕高潮| 99久久精品费精品国产一区二区| 亚洲第一激情av| 国产天堂亚洲国产碰碰| 欧美日韩aaa| 成人的网站免费观看| 日韩av在线发布| 成人欧美一区二区三区小说| 欧美在线你懂得| 青娱乐精品视频在线|