X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FFileHandle.hh;h=2f6b09f0bd32b2d73d76df1a20515ed3a961bfe9;hb=85ab07d100a382467a42e19d741d403a7a96c951;hp=a0b2de58fc02552f9f519bdfd3e2213974e77091;hpb=3e42ecb22121f2e6df86b27bea73f890384a4ee4;p=senf.git diff --git a/Socket/FileHandle.hh b/Socket/FileHandle.hh index a0b2de5..2f6b09f 100644 --- a/Socket/FileHandle.hh +++ b/Socket/FileHandle.hh @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2006 +// Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) // Kompetenzzentrum fuer Satelitenkommunikation (SatCom) // Stefan Bund @@ -20,7 +20,7 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -/** \file +/** \file \brief FileHandle public header */ @@ -42,7 +42,7 @@ only classes, which may be created by the library user. You will normally use these classes by naming a specific socket typedef (e.g. senf::TCPv4ClientSocketHandle). - + However, to aid writing flexible and generic code, the socket library provides the senf::ClientSocketHandle and senf::ServerSocketHandle class templates. These templates @@ -76,44 +76,44 @@ #include "FileHandle.ih" namespace senf { - + /// \addtogroup handle_group /// @{ - + /** \brief Basic file handle wrapper - senf::FileHandle provides a simple wrapper for arbitrary file handles. It exposes only a - minimal interface which does \e not include reading or writing (since some filehandles are - not readable or writable or only using special function calls like sendto). - - The FileHandle class provides handle/body handling and uses automatic reference - counting. The senf::FileHandle istance is very lightweight and should be used like a - built-in type. - - \attention You should mostly pass around senf::FileHandle objects by \e value und not by - reference. - - The FileHandle abstraction is only applicable to real filehandles. It is \e not possible to - wrap any provider or consumer into a filehandle like interface using this wrapper. The - wrapper will forward some calls directly to the underlying API without relying on virtual - methods. This allows important members to be inlined. - - It is not possible to use the senf::FileHandle class directly since it does not have any - public constructor. The FileHandle class is however the baseclass of all handle classes of - the socket library. - - \section filehandle_new Writing senf::FileHandle derived classes - - To build a new FileHandle type you need to derive from senf::FileHandle. The derived class - will have to call the protocted FileHandle constructor passing a new senf::FileBody - instance. This instance may either be a simple senf::FileBody or a class derived from - senf::FileBody. - - \todo Add public default constructor to allow declaration of (empty) senf::FileHandle - variables. + senf::FileHandle provides a simple wrapper for arbitrary file handles. It exposes only a + minimal interface which does \e not include reading or writing (since some filehandles are + not readable or writable or only using special function calls like sendto). + + The FileHandle class provides handle/body handling and uses automatic reference + counting. The senf::FileHandle istance is very lightweight and should be used like a + built-in type. + + \attention You should mostly pass around senf::FileHandle objects by \e value und not by + reference. + + The FileHandle abstraction is only applicable to real filehandles. It is \e not possible to + wrap any provider or consumer into a filehandle like interface using this wrapper. The + wrapper will forward some calls directly to the underlying API without relying on virtual + methods. This allows important members to be inlined. + + It is not possible to use the senf::FileHandle class directly since it does not have any + public constructor. The FileHandle class is however the baseclass of all handle classes of + the socket library. + + \section filehandle_new Writing senf::FileHandle derived classes + + To build a new FileHandle type you need to derive from senf::FileHandle. The derived class + will have to call the protocted FileHandle constructor passing a new senf::FileBody + instance. This instance may either be a simple senf::FileBody or a class derived from + senf::FileBody. + + \todo Add public default constructor to allow declaration of (empty) senf::FileHandle + variables. */ class FileHandle - : public SafeBool + : public SafeBool { public: /////////////////////////////////////////////////////////////////////////// @@ -134,39 +134,39 @@ namespace senf { /////////////////////////////////////////////////////////////////////////// void close(); ///< Close filehandle - /**< \throws senf::SystemException */ + /**< \throws senf::SystemException */ void terminate(); ///< Close filehandle ignoring error conditions bool readable() const; ///< Check, wether a read on the handle would not block - ///< (ignoring blocking state) + ///< (ignoring blocking state) void waitReadable() const; ///< Wait, until read on the handle would not block (ignoring - ///< blocking state) + ///< blocking state) bool writeable() const; ///< Check, wether a write on the handle would not block - ///< (ignoring blocking state) + ///< (ignoring blocking state) void waitWriteable() const; ///< Wait, until a write on the handle would not block - ///< (ignoring blocking state) + ///< (ignoring blocking state) bool blocking() const; ///< Return current blocking state void blocking(bool status); ///< Set blocking state bool eof() const; ///< Check EOF condition - /**< Depending on the socket type, this might never return \p - true. - - This member is somewhat problematic performance wise if - called frequently since it relies on virtual - functions. However, since the eof() handling is extremely - protocol dependent, a policy based implementation does not - seam feasible. */ + /**< Depending on the socket type, this might never return \p + true. + + This member is somewhat problematic performance wise if + called frequently since it relies on virtual + functions. However, since the eof() handling is extremely + protocol dependent, a policy based implementation does not + seam feasible. */ bool valid() const; ///< Check filehandle validity - /**< Any operation besides valid() will fail on an invalid - FileHandle */ + /**< Any operation besides valid() will fail on an invalid + FileHandle */ - bool boolean_test() const; ///< Short for valid() && ! eof() - /**< This is called when using a FileHandle instance in a boolen - context + bool boolean_test() const; ///< Short for valid() && ! eof() + /**< This is called when using a FileHandle instance in a boolen + context - See the performance comments for the eof() member */ + See the performance comments for the eof() member */ int fd() const; ///< Return the raw FileHandle @@ -175,31 +175,31 @@ namespace senf { protected: explicit FileHandle(std::auto_ptr body); - ///< create new FileHandle instance - /**< The FileHandle instance will take over ownership over the - given FileBody instance which must have been allocated using - \c new. To configure the FileHandle behavior, A derived class - may provide any class derived from FileBody here. */ + ///< create new FileHandle instance + /**< The FileHandle instance will take over ownership over the + given FileBody instance which must have been allocated using + \c new. To configure the FileHandle behavior, A derived class + may provide any class derived from FileBody here. */ FileBody & body(); ///< Access body FileBody const & body() const; ///< Access body in const context static FileBody & body(FileHandle & handle); ///< Access body of another FileHandle instance static FileBody const & body(FileHandle const & handle); ///< Access body of another - ///< FileHandle instance in const context + ///< FileHandle instance in const context - void fd(int fd); ///< Set raw filehandle + void fd(int fd); ///< Set raw filehandle private: FileBody::ptr body_; }; /** \brief Adapt FileHandle to senf::Scheduler - \related senf::FileHandle + \related senf::FileHandle - \internal + \internal - This function will be called by the Scheduler to retrieve the file descriptor of the - FileHandle. + This function will be called by the Scheduler to retrieve the file descriptor of the + FileHandle. */ int retrieve_filehandle(FileHandle handle); @@ -216,6 +216,8 @@ namespace senf { // Local Variables: // mode: c++ -// c-file-style: "senf" // fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" // End: