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

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

?? buffer.h

?? Last Update: Jan 22 2009 可靠UDP傳輸, 一套高效的基于windows平臺(tái)的C++ 開發(fā)庫
?? H
字號(hào):
/*****************************************************************************Copyright (c) 2001 - 2008, The Board of Trustees of the University of Illinois.All rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditions aremet:* Redistributions of source code must retain the above  copyright notice, this list of conditions and the  following disclaimer.* Redistributions in binary form must reproduce the  above copyright notice, this list of conditions  and the following disclaimer in the documentation  and/or other materials provided with the distribution.* Neither the name of the University of Illinois  nor the names of its contributors may be used to  endorse or promote products derived from this  software without specific prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "ASIS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULARPURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ORCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, ORPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OFLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDINGNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THISSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*****************************************************************************//*****************************************************************************written by   Yunhong Gu, last updated 12/28/2008*****************************************************************************/#ifndef __UDT_BUFFER_H__#define __UDT_BUFFER_H__#include "udt.h"#include "list.h"#include "queue.h"#include <fstream>class CSndBuffer{public:   CSndBuffer(const int& size, const int& mss);   ~CSndBuffer();      // Functionality:      //    Insert a user buffer into the sending list.      // Parameters:      //    0) [in] data: pointer to the user data block.      //    1) [in] len: size of the block.      //    2) [in] ttl: time to live in milliseconds      //    3) [in] order: if the block should be delivered in order, for DGRAM only      // Returned value:      //    None.   void addBuffer(const char* data, const int& len, const int& ttl = -1, const bool& order = false);      // Functionality:      //    Read a block of data from file and insert it into the sending list.      // Parameters:      //    0) [in] ifs: input file stream.      //    1) [in] len: size of the block.      // Returned value:      //    actual size of data added from the file.   int addBufferFromFile(std::ifstream& ifs, const int& len);      // Functionality:      //    Find data position to pack a DATA packet from the furthest reading point.      // Parameters:      //    0) [out] data: the pointer to the data position.      //    1) [out] msgno: message number of the packet.      // Returned value:      //    Actual length of data read.   int readData(char** data, int32_t& msgno);      // Functionality:      //    Find data position to pack a DATA packet for a retransmission.      // Parameters:      //    0) [out] data: the pointer to the data position.      //    1) [in] offset: offset from the last ACK point.      //    2) [out] msgno: message number of the packet.      //    3) [out] msglen: length of the message      // Returned value:      //    Actual length of data read.   int readData(char** data, const int offset, int32_t& msgno, int& msglen);      // Functionality:      //    Update the ACK point and may release/unmap/return the user data according to the flag.      // Parameters:      //    0) [in] offset: number of packets acknowledged.      // Returned value:      //    None.   void ackData(const int& offset);      // Functionality:      //    Read size of data still in the sending list.      // Parameters:      //    None.      // Returned value:      //    Current size of the data in the sending list.   int getCurrBufSize() const;private:   void increase();private:   pthread_mutex_t m_BufLock;           // used to synchronize buffer operation   struct Block   {      char* m_pcData;                   // pointer to the data block      int m_iLength;                    // length of the block      int32_t m_iMsgNo;                 // message number      uint64_t m_OriginTime;            // original request time      int m_iTTL;                       // time to live (milliseconds)      Block* m_pNext;                   // next block   } *m_pBlock, *m_pFirstBlock, *m_pCurrBlock, *m_pLastBlock;   // m_pBlock:         The head pointer   // m_pFirstBlock:    The first block   // m_pCurrBlock:	The current block   // m_pLastBlock:     The last block (if first == last, buffer is empty)   struct Buffer   {      char* m_pcData;			// buffer      int m_iSize;			// size      Buffer* m_pNext;			// next buffer   } *m_pBuffer;			// physical buffer   int32_t m_iNextMsgNo;                // next message number   int m_iSize;				// buffer size (number of packets)   int m_iMSS;                          // maximum seqment/packet size   int m_iCount;			// number of used blocks};////////////////////////////////////////////////////////////////////////////////class CRcvBuffer{public:   CRcvBuffer(CUnitQueue* queue);   CRcvBuffer(const int& bufsize, CUnitQueue* queue);   ~CRcvBuffer();      // Functionality:      //    Write data into the buffer.      // Parameters:      //    0) [in] unit: pointer to a data unit containing new packet      //    1) [in] offset: offset from last ACK point.      // Returned value:      //    0 is success, -1 if data is repeated.   int addData(CUnit* unit, int offset);      // Functionality:      //    Read data into a user buffer.      // Parameters:      //    0) [in] data: pointer to user buffer.      //    1) [in] len: length of user buffer.      // Returned value:      //    size of data read.   int readBuffer(char* data, const int& len);      // Functionality:      //    Read data directly into file.      // Parameters:      //    0) [in] file: C++ file stream.      //    1) [in] len: expected length of data to write into the file.      // Returned value:      //    size of data read.   int readBufferToFile(std::ofstream& file, const int& len);      // Functionality:      //    Update the ACK point of the buffer.      // Parameters:      //    0) [in] len: size of data to be acknowledged.      // Returned value:      //    1 if a user buffer is fulfilled, otherwise 0.   void ackData(const int& len);      // Functionality:      //    Query how many buffer space left for data receiving.      // Parameters:      //    None.      // Returned value:      //    size of available buffer space (including user buffer) for data receiving.   int getAvailBufSize() const;      // Functionality:      //    Query how many data has been continuously received (for reading).      // Parameters:      //    None.      // Returned value:      //    size of valid (continous) data for reading.   int getRcvDataSize() const;      // Functionality:      //    mark the message to be dropped from the message list.      // Parameters:      //    0) [in] msgno: message nuumer.      // Returned value:      //    None.   void dropMsg(const int32_t& msgno);      // Functionality:      //    read a message.      // Parameters:      //    0) [out] data: buffer to write the message into.      //    1) [in] len: size of the buffer.      // Returned value:      //    actuall size of data read.   int readMsg(char* data, const int& len);      // Functionality:      //    Query how many messages are available now.      // Parameters:      //    None.      // Returned value:      //    number of messages available for recvmsg.   int getRcvMsgNum();private:   bool scanMsg(int& start, int& end, bool& passack);private:   CUnit** m_pUnit;                     // pointer to the protocol buffer   int m_iSize;                         // size of the protocol buffer   CUnitQueue* m_pUnitQueue;		// the shared unit queue   int m_iStartPos;                     // the head position for I/O (inclusive)   int m_iLastAckPos;                   // the last ACKed position (exclusive)					// EMPTY: m_iStartPos = m_iLastAckPos   FULL: m_iStartPos = m_iLastAckPos + 1   int m_iMaxPos;			// the furthest data position   int m_iNotch;			// the starting read point of the first unit};#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品欧美日韩精品| 国产人伦精品一区二区| 在线观看国产精品网站| 91一区二区三区在线观看| 99视频精品在线| 不卡一区二区中文字幕| 99国产精品国产精品毛片| 99久久精品99国产精品| 色狠狠一区二区三区香蕉| 色8久久精品久久久久久蜜| 欧美在线一区二区三区| 欧美区视频在线观看| 日韩欧美中文字幕制服| 久久久精品蜜桃| 国产精品国产自产拍在线| 亚洲婷婷综合久久一本伊一区| 亚洲美女视频在线观看| 亚洲一区二区3| 日韩va欧美va亚洲va久久| 久久成人18免费观看| 国产资源在线一区| 99国产精品国产精品久久| 在线观看www91| 日韩一区二区三| 国产日本欧美一区二区| 1区2区3区精品视频| 亚洲图片有声小说| 极品少妇一区二区三区精品视频| 国产精品亚洲第一区在线暖暖韩国 | 欧美一区二区日韩一区二区| 久久久一区二区| 亚洲天堂福利av| 丝袜亚洲精品中文字幕一区| 国产麻豆精品久久一二三| 91在线国产福利| 8x8x8国产精品| 国产亚洲短视频| 亚洲国产一区视频| 麻豆精品在线播放| 91麻豆国产在线观看| 91精品国产91久久久久久一区二区 | 中文成人综合网| 色哟哟一区二区| 精品国产免费久久 | 色婷婷综合五月| 6080国产精品一区二区| 中文字幕第一页久久| 亚洲成人av一区二区| 国产美女主播视频一区| 在线观看一区二区精品视频| 久久嫩草精品久久久精品| 亚洲午夜免费福利视频| 国产成人av资源| 欧美丰满少妇xxxxx高潮对白 | 韩国欧美国产一区| 色综合天天视频在线观看| 精品久久久久久久久久久久久久久久久 | 日本丶国产丶欧美色综合| 亚洲精品在线电影| 亚洲大型综合色站| a4yy欧美一区二区三区| 日韩一级免费观看| 亚洲一区二区在线播放相泽| 粉嫩高潮美女一区二区三区| 欧美一区二区在线免费观看| 成人欧美一区二区三区黑人麻豆 | 欧美a级理论片| 91蝌蚪porny| 国产亚洲短视频| 久久成人精品无人区| 欧美蜜桃一区二区三区| 亚洲欧美一区二区三区孕妇| 国产黄色精品视频| 日韩精品一区二区三区四区视频| 亚洲国产精品久久久久婷婷884 | 欧美高清视频不卡网| 99国产精品久久久久久久久久久| 日韩一区二区三区免费观看| 亚洲成人免费影院| 色素色在线综合| 国产精品欧美一级免费| 国产精品一区二区黑丝 | 麻豆高清免费国产一区| 欧美日韩激情一区| 亚洲精品va在线观看| 91亚洲男人天堂| 亚洲国产精品t66y| 国产二区国产一区在线观看| 精品区一区二区| 蜜芽一区二区三区| 91精品国产一区二区| 亚洲日本丝袜连裤袜办公室| 成人av影视在线观看| 国产精品久久久一本精品| 国产盗摄女厕一区二区三区| 精品人伦一区二区色婷婷| 久久av中文字幕片| 精品久久国产老人久久综合| 久久99精品国产.久久久久久| 欧美精品第1页| 日韩电影在线一区二区三区| 欧美一级理论片| 美女高潮久久久| 欧美精品一区二区三区蜜桃视频 | 国产成人精品网址| 国产女人aaa级久久久级| 国产不卡视频在线观看| 欧美国产日韩在线观看| 成人自拍视频在线| 国产精品久线在线观看| 99视频精品在线| 亚洲一区二区精品视频| 欧美区一区二区三区| 蜜臀久久99精品久久久画质超高清| 欧美xxxx老人做受| 国产美女精品人人做人人爽| 国产精品麻豆久久久| 色综合激情久久| 亚洲成av人片在线| 日韩一卡二卡三卡四卡| 国内精品视频一区二区三区八戒| 国产农村妇女精品| 亚洲综合色噜噜狠狠| 欧美一区二区三区视频免费播放| 精品一区二区精品| 国产精品久99| 欧美日韩免费观看一区二区三区| 日韩成人一区二区| 欧美极品xxx| 欧美伊人久久大香线蕉综合69 | 欧美视频在线一区二区三区| 日韩电影在线免费观看| 国产欧美一区二区三区在线看蜜臀| 成人av在线一区二区| 亚洲一区二区精品久久av| 欧美成人三级电影在线| 国产91精品一区二区麻豆亚洲| 亚洲乱码一区二区三区在线观看| 欧美精品一卡二卡| 国产乱子伦一区二区三区国色天香| 中文字幕视频一区| 9191成人精品久久| 床上的激情91.| 视频一区在线播放| 国产精品久久久久久久蜜臀 | 1区2区3区国产精品| 91精品国产综合久久久久久漫画 | 成人av在线影院| 图片区小说区区亚洲影院| 国产日韩欧美一区二区三区乱码 | xvideos.蜜桃一区二区| 一本大道久久a久久精品综合| 美女看a上一区| 亚洲欧美偷拍三级| 日韩你懂的在线观看| 色婷婷综合久色| 国产河南妇女毛片精品久久久| 亚洲成人免费看| 国产精品国产精品国产专区不蜜| 337p亚洲精品色噜噜狠狠| 成人av在线一区二区| 久久99精品国产麻豆婷婷| 亚洲一区二区三区四区在线观看| 国产午夜精品一区二区| 91精品欧美久久久久久动漫| 国产女人18毛片水真多成人如厕 | 欧美日韩高清在线| 波多野洁衣一区| 狠狠色综合播放一区二区| 性久久久久久久久| 1024国产精品| 久久亚洲私人国产精品va媚药| 欧美日韩国产不卡| 色婷婷精品大在线视频| 国产大片一区二区| 精品一区二区三区在线播放视频| 亚洲午夜精品一区二区三区他趣| 中文字幕av不卡| 精品成人一区二区三区四区| 欧美日本国产视频| 91影视在线播放| 成人爱爱电影网址| 国产乱理伦片在线观看夜一区| 日韩成人一区二区三区在线观看| 一卡二卡三卡日韩欧美| 亚洲欧洲99久久| 欧美国产一区视频在线观看| 欧美精品一区二区三区高清aⅴ | 日韩欧美国产综合在线一区二区三区| 色激情天天射综合网| 91视频.com| 97se亚洲国产综合在线| 波多野结衣中文字幕一区二区三区| 国产在线视频一区二区| 久久精品国产一区二区| 日韩av电影免费观看高清完整版在线观看| 亚洲国产中文字幕在线视频综合| 一区二区免费在线| 亚洲精品国产无天堂网2021| 亚洲乱码国产乱码精品精可以看|