Index: net/third_party/udt/src/epoll.h |
=================================================================== |
--- net/third_party/udt/src/epoll.h (revision 78992) |
+++ net/third_party/udt/src/epoll.h (working copy) |
@@ -1,199 +0,0 @@ |
-/***************************************************************************** |
-Copyright (c) 2001 - 2010, 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 08/20/2010 |
-*****************************************************************************/ |
- |
-#ifndef __UDT_EPOLL_H__ |
-#define __UDT_EPOLL_H__ |
- |
- |
-#include <map> |
-#include <set> |
-#include "udt.h" |
- |
- |
-struct CEPollDesc |
-{ |
- int m_iID; // epoll ID |
- std::set<UDTSOCKET> m_sUDTSocks; // set of UDT sockets waiting for events |
- |
- int m_iLocalID; // local system epoll ID |
- std::set<SYSSOCKET> m_sLocals; // set of local (non-UDT) descriptors |
- |
- std::set<UDTSOCKET> m_sUDTWrites; // UDT sockets ready for write |
- std::set<UDTSOCKET> m_sUDTReads; // UDT sockets ready for read |
-}; |
- |
-class CEPoll |
-{ |
-friend class CUDT; |
- |
-public: |
- CEPoll(); |
- ~CEPoll(); |
- |
-public: // for CUDTUnited API |
- |
- // Functionality: |
- // create a new EPoll. |
- // Parameters: |
- // None. |
- // Returned value: |
- // new EPoll ID if success, otherwise an error number. |
- |
- int create(); |
- |
- // Functionality: |
- // add a UDT socket to an EPoll. |
- // Parameters: |
- // 0) [in] eid: EPoll ID. |
- // 1) [in] u: UDT Socket ID. |
- // 2) [in] events: events to watch. |
- // Returned value: |
- // 0 if success, otherwise an error number. |
- |
- int add_usock(const int eid, const UDTSOCKET& u, const int* events = NULL); |
- |
- // Functionality: |
- // add a system socket to an EPoll. |
- // Parameters: |
- // 0) [in] eid: EPoll ID. |
- // 1) [in] s: system Socket ID. |
- // 2) [in] events: events to watch. |
- // Returned value: |
- // 0 if success, otherwise an error number. |
- |
- int add_ssock(const int eid, const SYSSOCKET& s, const int* events = NULL); |
- |
- // Functionality: |
- // remove a UDT socket event from an EPoll; socket will be removed if no events to watch |
- // Parameters: |
- // 0) [in] eid: EPoll ID. |
- // 1) [in] u: UDT socket ID. |
- // 2) [in] events: events to delete. |
- // Returned value: |
- // 0 if success, otherwise an error number. |
- |
- int remove_usock(const int eid, const UDTSOCKET& u, const int* events = NULL); |
- |
- // Functionality: |
- // remove a system socket event from an EPoll; socket will be removed if no events to watch |
- // Parameters: |
- // 0) [in] eid: EPoll ID. |
- // 1) [in] s: system socket ID. |
- // 2) [in] events: events to delete. |
- // Returned value: |
- // 0 if success, otherwise an error number. |
- |
- int remove_ssock(const int eid, const SYSSOCKET& s, const int* events = NULL); |
- |
- // Functionality: |
- // wait for EPoll events or timeout. |
- // Parameters: |
- // 0) [in] eid: EPoll ID. |
- // 1) [out] readfds: UDT sockets available for reading. |
- // 2) [out] writefds: UDT sockets available for writing. |
- // 3) [in] msTimeOut: timeout threshold, in milliseconds. |
- // 4) [out] lrfds: system file descriptors for reading. |
- // 5) [out] lwfds: system file descriptors for writing. |
- // Returned value: |
- // number of sockets available for IO. |
- |
- int wait(const int eid, std::set<UDTSOCKET>* readfds, std::set<UDTSOCKET>* writefds, int64_t msTimeOut, std::set<SYSSOCKET>* lrfds, std::set<SYSSOCKET>* lwfds); |
- |
- // Functionality: |
- // close and release an EPoll. |
- // Parameters: |
- // 0) [in] eid: EPoll ID. |
- // Returned value: |
- // 0 if success, otherwise an error number. |
- |
- int release(const int eid); |
- |
-public: // for CUDT to acknowledge IO status |
- |
- // Functionality: |
- // set a UDT socket writable. |
- // Parameters: |
- // 0) [in] uid: UDT socket ID. |
- // 1) [in] eids: EPoll IDs to be set |
- // Returned value: |
- // 0 if success, otherwise an error number. |
- |
- int enable_write(const UDTSOCKET& uid, std::set<int>& eids); |
- |
- // Functionality: |
- // set a UDT socket readable. |
- // Parameters: |
- // 0) [in] uid: UDT socket ID. |
- // 1) [in] eids: EPoll IDs to be set |
- // Returned value: |
- // 0 if success, otherwise an error number. |
- |
- int enable_read(const UDTSOCKET& uid, std::set<int>& eids); |
- |
- // Functionality: |
- // reset a the writable status of a UDT socket. |
- // Parameters: |
- // 0) [in] uid: UDT socket ID. |
- // 1) [in] eids: EPoll IDs to be set |
- // Returned value: |
- // 0 if success, otherwise an error number. |
- |
- int disable_write(const UDTSOCKET& uid, std::set<int>& eids); |
- |
- // Functionality: |
- // reset a the readable status of a UDT socket. |
- // Parameters: |
- // 0) [in] uid: UDT socket ID. |
- // 1) [in] eids: EPoll IDs to be set |
- // Returned value: |
- // 0 if success, otherwise an error number. |
- |
- int disable_read(const UDTSOCKET& uid, std::set<int>& eids); |
- |
-private: |
- int m_iIDSeed; // seed to generate a new ID |
- pthread_mutex_t m_SeedLock; |
- |
- std::map<int, CEPollDesc> m_mPolls; // all epolls |
- pthread_mutex_t m_EPollLock; |
-}; |
- |
- |
-#endif |