| Index: net/third_party/udt/src/udt.h
|
| ===================================================================
|
| --- net/third_party/udt/src/udt.h (revision 78992)
|
| +++ net/third_party/udt/src/udt.h (working copy)
|
| @@ -1,336 +0,0 @@
|
| -/*****************************************************************************
|
| -Copyright (c) 2001 - 2011, The Board of Trustees of the University of Illinois.
|
| -All rights reserved.
|
| -
|
| -Redistribution and use in source and binary forms, with or without
|
| -modification, are permitted provided that the following conditions are
|
| -met:
|
| -
|
| -* 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 "AS
|
| -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
| -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
| -CONTRIBUTORS 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, OR
|
| -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
| -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| -*****************************************************************************/
|
| -
|
| -/*****************************************************************************
|
| -written by
|
| - Yunhong Gu, last updated 01/18/2011
|
| -*****************************************************************************/
|
| -
|
| -#ifndef __UDT_H__
|
| -#define __UDT_H__
|
| -
|
| -
|
| -#ifndef WIN32
|
| - #include <sys/types.h>
|
| - #include <sys/socket.h>
|
| - #include <netinet/in.h>
|
| -#else
|
| - #ifdef __MINGW__
|
| - #include <stdint.h>
|
| - #include <ws2tcpip.h>
|
| - #endif
|
| - #include <windows.h>
|
| -#endif
|
| -#include <fstream>
|
| -#include <set>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -//if compiling on VC6.0 or pre-WindowsXP systems
|
| -//use -DLEGACY_WIN32
|
| -
|
| -//if compiling with MinGW, it only works on XP or above
|
| -//use -D_WIN32_WINNT=0x0501
|
| -
|
| -
|
| -#ifdef WIN32
|
| - #ifndef __MINGW__
|
| - // Explicitly define 32-bit and 64-bit numbers
|
| - typedef __int32 int32_t;
|
| - typedef __int64 int64_t;
|
| - typedef unsigned __int32 uint32_t;
|
| - #ifndef LEGACY_WIN32
|
| - typedef unsigned __int64 uint64_t;
|
| - #else
|
| - // VC 6.0 does not support unsigned __int64: may cause potential problems.
|
| - typedef __int64 uint64_t;
|
| - #endif
|
| -
|
| - #ifdef UDT_EXPORTS
|
| - #define UDT_API __declspec(dllexport)
|
| - #else
|
| - #define UDT_API __declspec(dllimport)
|
| - #endif
|
| - #else
|
| - #define UDT_API
|
| - #endif
|
| -#else
|
| - #define UDT_API
|
| -#endif
|
| -
|
| -#define NO_BUSY_WAITING
|
| -
|
| -#ifdef WIN32
|
| - #ifndef __MINGW__
|
| - typedef SOCKET UDPSOCKET;
|
| - typedef SOCKET SYSSOCKET;
|
| - #else
|
| - typedef int UDPSOCKET;
|
| - typedef int SYSSOCKET;
|
| - #endif
|
| -#else
|
| - typedef int UDPSOCKET;
|
| - typedef int SYSSOCKET;
|
| -#endif
|
| -
|
| -typedef int UDTSOCKET;
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -typedef std::set<UDTSOCKET> ud_set;
|
| -#define UD_CLR(u, uset) ((uset)->erase(u))
|
| -#define UD_ISSET(u, uset) ((uset)->find(u) != (uset)->end())
|
| -#define UD_SET(u, uset) ((uset)->insert(u))
|
| -#define UD_ZERO(uset) ((uset)->clear())
|
| -
|
| -enum EPOLLOpt
|
| -{
|
| - // this values are defined same as linux epoll.h
|
| - // so that if system values are used by mistake, they should have the same effect
|
| - UDT_EPOLL_IN = 0x1,
|
| - UDT_EPOLL_OUT = 0x4,
|
| - UDT_EPOLL_ERR = 0x8
|
| -};
|
| -
|
| -enum UDTSTATUS {INIT = 1, OPENED, LISTENING, CONNECTED, BROKEN, CLOSED, NONEXIST};
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -enum UDTOpt
|
| -{
|
| - UDT_MSS, // the Maximum Transfer Unit
|
| - UDT_SNDSYN, // if sending is blocking
|
| - UDT_RCVSYN, // if receiving is blocking
|
| - UDT_CC, // custom congestion control algorithm
|
| - UDT_FC, // Flight flag size (window size)
|
| - UDT_SNDBUF, // maximum buffer in sending queue
|
| - UDT_RCVBUF, // UDT receiving buffer size
|
| - UDT_LINGER, // waiting for unsent data when closing
|
| - UDP_SNDBUF, // UDP sending buffer size
|
| - UDP_RCVBUF, // UDP receiving buffer size
|
| - UDT_MAXMSG, // maximum datagram message size
|
| - UDT_MSGTTL, // time-to-live of a datagram message
|
| - UDT_RENDEZVOUS, // rendezvous connection mode
|
| - UDT_SNDTIMEO, // send() timeout
|
| - UDT_RCVTIMEO, // recv() timeout
|
| - UDT_REUSEADDR, // reuse an existing port or create a new one
|
| - UDT_MAXBW // maximum bandwidth (bytes per second) that the connection can use
|
| -};
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -struct CPerfMon
|
| -{
|
| - // global measurements
|
| - int64_t msTimeStamp; // time since the UDT entity is started, in milliseconds
|
| - int64_t pktSentTotal; // total number of sent data packets, including retransmissions
|
| - int64_t pktRecvTotal; // total number of received packets
|
| - int pktSndLossTotal; // total number of lost packets (sender side)
|
| - int pktRcvLossTotal; // total number of lost packets (receiver side)
|
| - int pktRetransTotal; // total number of retransmitted packets
|
| - int pktSentACKTotal; // total number of sent ACK packets
|
| - int pktRecvACKTotal; // total number of received ACK packets
|
| - int pktSentNAKTotal; // total number of sent NAK packets
|
| - int pktRecvNAKTotal; // total number of received NAK packets
|
| - int64_t usSndDurationTotal; // total time duration when UDT is sending data (idle time exclusive)
|
| -
|
| - // local measurements
|
| - int64_t pktSent; // number of sent data packets, including retransmissions
|
| - int64_t pktRecv; // number of received packets
|
| - int pktSndLoss; // number of lost packets (sender side)
|
| - int pktRcvLoss; // number of lost packets (receiver side)
|
| - int pktRetrans; // number of retransmitted packets
|
| - int pktSentACK; // number of sent ACK packets
|
| - int pktRecvACK; // number of received ACK packets
|
| - int pktSentNAK; // number of sent NAK packets
|
| - int pktRecvNAK; // number of received NAK packets
|
| - double mbpsSendRate; // sending rate in Mb/s
|
| - double mbpsRecvRate; // receiving rate in Mb/s
|
| - int64_t usSndDuration; // busy sending time (i.e., idle time exclusive)
|
| -
|
| - // instant measurements
|
| - double usPktSndPeriod; // packet sending period, in microseconds
|
| - int pktFlowWindow; // flow window size, in number of packets
|
| - int pktCongestionWindow; // congestion window size, in number of packets
|
| - int pktFlightSize; // number of packets on flight
|
| - double msRTT; // RTT, in milliseconds
|
| - double mbpsBandwidth; // estimated bandwidth, in Mb/s
|
| - int byteAvailSndBuf; // available UDT sender buffer size
|
| - int byteAvailRcvBuf; // available UDT receiver buffer size
|
| -};
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -class UDT_API CUDTException
|
| -{
|
| -public:
|
| - CUDTException(int major = 0, int minor = 0, int err = -1);
|
| - CUDTException(const CUDTException& e);
|
| - virtual ~CUDTException();
|
| -
|
| - // Functionality:
|
| - // Get the description of the exception.
|
| - // Parameters:
|
| - // None.
|
| - // Returned value:
|
| - // Text message for the exception description.
|
| -
|
| - virtual const char* getErrorMessage();
|
| -
|
| - // Functionality:
|
| - // Get the system errno for the exception.
|
| - // Parameters:
|
| - // None.
|
| - // Returned value:
|
| - // errno.
|
| -
|
| - virtual int getErrorCode() const;
|
| -
|
| - // Functionality:
|
| - // Clear the error code.
|
| - // Parameters:
|
| - // None.
|
| - // Returned value:
|
| - // None.
|
| -
|
| - virtual void clear();
|
| -
|
| -private:
|
| - int m_iMajor; // major exception categories
|
| -
|
| -// 0: correct condition
|
| -// 1: network setup exception
|
| -// 2: network connection broken
|
| -// 3: memory exception
|
| -// 4: file exception
|
| -// 5: method not supported
|
| -// 6+: undefined error
|
| -
|
| - int m_iMinor; // for specific error reasons
|
| - int m_iErrno; // errno returned by the system if there is any
|
| - std::string m_strMsg; // text error message
|
| -
|
| - std::string m_strAPI; // the name of UDT function that returns the error
|
| - std::string m_strDebug; // debug information, set to the original place that causes the error
|
| -
|
| -public: // Error Code
|
| - static const int SUCCESS;
|
| - static const int ECONNSETUP;
|
| - static const int ENOSERVER;
|
| - static const int ECONNREJ;
|
| - static const int ESOCKFAIL;
|
| - static const int ESECFAIL;
|
| - static const int ECONNFAIL;
|
| - static const int ECONNLOST;
|
| - static const int ENOCONN;
|
| - static const int ERESOURCE;
|
| - static const int ETHREAD;
|
| - static const int ENOBUF;
|
| - static const int EFILE;
|
| - static const int EINVRDOFF;
|
| - static const int ERDPERM;
|
| - static const int EINVWROFF;
|
| - static const int EWRPERM;
|
| - static const int EINVOP;
|
| - static const int EBOUNDSOCK;
|
| - static const int ECONNSOCK;
|
| - static const int EINVPARAM;
|
| - static const int EINVSOCK;
|
| - static const int EUNBOUNDSOCK;
|
| - static const int ENOLISTEN;
|
| - static const int ERDVNOSERV;
|
| - static const int ERDVUNBOUND;
|
| - static const int ESTREAMILL;
|
| - static const int EDGRAMILL;
|
| - static const int EDUPLISTEN;
|
| - static const int ELARGEMSG;
|
| - static const int EINVPOLLID;
|
| - static const int EASYNCFAIL;
|
| - static const int EASYNCSND;
|
| - static const int EASYNCRCV;
|
| - static const int EPEERERR;
|
| - static const int EUNKNOWN;
|
| -};
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -namespace UDT
|
| -{
|
| -typedef CUDTException ERRORINFO;
|
| -typedef UDTOpt SOCKOPT;
|
| -typedef CPerfMon TRACEINFO;
|
| -typedef ud_set UDSET;
|
| -
|
| -UDT_API extern const UDTSOCKET INVALID_SOCK;
|
| -#undef ERROR
|
| -UDT_API extern const int ERROR;
|
| -
|
| -UDT_API int startup();
|
| -UDT_API int cleanup();
|
| -UDT_API UDTSOCKET socket(int af, int type, int protocol);
|
| -UDT_API int bind(UDTSOCKET u, const struct sockaddr* name, int namelen);
|
| -UDT_API int bind(UDTSOCKET u, UDPSOCKET udpsock);
|
| -UDT_API int listen(UDTSOCKET u, int backlog);
|
| -UDT_API UDTSOCKET accept(UDTSOCKET u, struct sockaddr* addr, int* addrlen);
|
| -UDT_API int connect(UDTSOCKET u, const struct sockaddr* name, int namelen);
|
| -UDT_API int close(UDTSOCKET u);
|
| -UDT_API int getpeername(UDTSOCKET u, struct sockaddr* name, int* namelen);
|
| -UDT_API int getsockname(UDTSOCKET u, struct sockaddr* name, int* namelen);
|
| -UDT_API int getsockopt(UDTSOCKET u, int level, SOCKOPT optname, void* optval, int* optlen);
|
| -UDT_API int setsockopt(UDTSOCKET u, int level, SOCKOPT optname, const void* optval, int optlen);
|
| -UDT_API int send(UDTSOCKET u, const char* buf, int len, int flags);
|
| -UDT_API int recv(UDTSOCKET u, char* buf, int len, int flags);
|
| -UDT_API int sendmsg(UDTSOCKET u, const char* buf, int len, int ttl = -1, bool inorder = false);
|
| -UDT_API int recvmsg(UDTSOCKET u, char* buf, int len);
|
| -UDT_API int64_t sendfile(UDTSOCKET u, std::fstream& ifs, int64_t& offset, int64_t size, int block = 364000);
|
| -UDT_API int64_t recvfile(UDTSOCKET u, std::fstream& ofs, int64_t& offset, int64_t size, int block = 7280000);
|
| -UDT_API int select(int nfds, UDSET* readfds, UDSET* writefds, UDSET* exceptfds, const struct timeval* timeout);
|
| -UDT_API int selectEx(const std::vector<UDTSOCKET>& fds, std::vector<UDTSOCKET>* readfds, std::vector<UDTSOCKET>* writefds, std::vector<UDTSOCKET>* exceptfds, int64_t msTimeOut);
|
| -UDT_API int epoll_create();
|
| -UDT_API int epoll_add_usock(const int eid, const UDTSOCKET u, const int* events = NULL);
|
| -UDT_API int epoll_add_ssock(const int eid, const SYSSOCKET s, const int* events = NULL);
|
| -UDT_API int epoll_remove_usock(const int eid, const UDTSOCKET u, const int* events = NULL);
|
| -UDT_API int epoll_remove_ssock(const int eid, const SYSSOCKET s, const int* events = NULL);
|
| -UDT_API int epoll_wait(const int eid, std::set<UDTSOCKET>* readfds, std::set<UDTSOCKET>* writefds, int64_t msTimeOut, std::set<SYSSOCKET>* lrfds = NULL, std::set<SYSSOCKET>* wrfds = NULL);
|
| -UDT_API int epoll_release(const int eid);
|
| -UDT_API ERRORINFO& getlasterror();
|
| -UDT_API int perfmon(UDTSOCKET u, TRACEINFO* perf, bool clear = true);
|
| -UDT_API UDTSTATUS getsockstate(UDTSOCKET u);
|
| -}
|
| -
|
| -#endif
|
|
|