X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FFileHandle.hh;h=377a8a61fbd9b036928e0af3e7c825fe1e614ba9;hb=a1fdb7bb122f0b05be809a922d4b7ef5e125fa67;hp=86cb10f65e460782678fd2e3d19693e3ac17a4e9;hpb=8421c3a8da7485cb8781045494ecaab3ed84f403;p=senf.git diff --git a/Socket/FileHandle.hh b/Socket/FileHandle.hh index 86cb10f..377a8a6 100644 --- a/Socket/FileHandle.hh +++ b/Socket/FileHandle.hh @@ -1,9 +1,9 @@ // $Id$ // // Copyright (C) 2006 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) -// Stefan Bund +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Stefan Bund // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -26,7 +26,15 @@ /** \defgroup handle_group The Handle Hierarchy - \image html FhHierarchy.png +
+ \ref SocketHandle + \ref ClientSocketHandle + \ref ProtocolClientSocketHandle + \ref ProtocolServerSocketHandle + \ref FileHandle + \ref ServerSocketHandle +
+ \htmlonly FhHierarchy \endhtmlonly The senf::FileHandle class is the base of a hierarchy of socket handle classes (realized as templates). These classes provide an interface to the complete socket API. While going down the @@ -54,12 +62,13 @@ the SocketHandle classes should not be changed. */ -#ifndef HH_FileHandle_ -#define HH_FileHandle_ 1 +#ifndef HH_SENF_Socket_FileHandle_ +#define HH_SENF_Socket_FileHandle_ 1 // Custom includes #include // std::auto_ptr -#include "Utils/SafeBool.hh" +#include "../Utils/safe_bool.hh" +#include "../Scheduler/ClockService.hh" //#include "FileHandle.mpp" ///////////////////////////////hh.p//////////////////////////////////////// @@ -100,7 +109,7 @@ namespace senf { senf::FileBody. */ class FileHandle - : public SafeBool + : public safe_bool { public: /////////////////////////////////////////////////////////////////////////// @@ -111,6 +120,7 @@ namespace senf { ///@{ FileHandle(); + ~FileHandle(); // my default constructor // default copy constructor @@ -128,12 +138,31 @@ namespace senf { bool readable() const; ///< Check, whether a read on the handle would not block ///< (ignoring blocking state) - void waitReadable() const; ///< Wait, until read on the handle would not block (ignoring + bool waitReadable(senf::ClockService::clock_type timeout = -1) const; + ///< Wait, until read on the handle would not block (ignoring ///< blocking state) + /**< \param[in] timeout max time to wait, default is to wait + forever. + \returns \c true, if handle became readable or \c false on + timeout. */ bool writeable() const; ///< Check, whether a write on the handle would not block ///< (ignoring blocking state) - void waitWriteable() const; ///< Wait, until a write on the handle would not block + bool waitWriteable(senf::ClockService::clock_type timeout = -1) const; + ///< Wait, until a write on the handle would not block ///< (ignoring blocking state) + /**< \param[in] timeout max time to wait, default is to wait + forever. + \returns \c true, if handle became writable or \c false on + timeout. */ + bool oobReadable() const; ///< Check, whether a read of prioritized data on the handle + ///< would not block (ignoring blocking state) + bool waitOOBReadable(senf::ClockService::clock_type timeout = -1) const; + ///< Wait, until read of prioritized data on the handle does + ///< not block (ignoring blocking state) + /**< \param[in] timeout max time to wait, default is to wait + forever. + \returns \c true, if handle became readable for + out-of-band data or \c false on timeout. */ bool blocking() const; ///< Return current blocking state void blocking(bool status); ///< Set blocking state @@ -170,6 +199,8 @@ namespace senf { \c new. To configure the FileHandle behavior, A derived class may provide any class derived from FileBody here. */ + explicit FileHandle(FileBody::ptr body); + FileBody & body(); ///< Access body FileBody const & body() const; ///< Access body in const context static FileBody & body(FileHandle & handle); ///< Access body of another FileHandle instance @@ -180,9 +211,11 @@ namespace senf { private: FileBody::ptr body_; + + friend class FileBody; }; - /** \brief Adapt FileHandle to senf::Scheduler + /** \brief Adapt FileHandle to senf::scheduler \related senf::FileHandle \internal @@ -209,4 +242,6 @@ namespace senf { // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: