Fix documentation build under maverick (doxygen 1.7.1)
[senf.git] / senf / Socket / Protocols / BSDSocketProtocol.hh
1 // $Id$
2 //
3 // Copyright (C) 2006
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 //     Stefan Bund <g0dil@berlios.de>
7 //
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
12 //
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 // GNU General Public License for more details.
17 //
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22
23 /** \file
24     \brief BSDSocketProtocol public header */
25
26 #ifndef HH_SENF_Socket_Protocols_BSDSocketProtocol_
27 #define HH_SENF_Socket_Protocols_BSDSocketProtocol_ 1
28
29 // Custom includes
30 #include <senf/Socket/SocketProtocol.hh>
31 #include <boost/cstdint.hpp>
32
33 //#include "BSDSocketProtocol.mpp"
34 //-/////////////////////////////////////////////////////////////////////////////////////////////////
35
36 namespace senf {
37
38     /// \addtogroup protocol_facets_group
39     //\{
40
41     /** \brief Protocol facet providing basic BSD socket functionality
42
43         BSDSocketProtocol provides the basic BSD socket API as shared by all BSD sockets.
44      */
45     class BSDSocketProtocol
46         : public virtual SocketProtocol
47     {
48     public:
49         std::pair<bool,unsigned> linger() const; ///< Return current linger status
50                                         /**< The value is returned in an std:pair. the first element
51                                              is \c true, if linger is active. The second value is
52                                              the linger timeout in seconds.
53                                              \returns linger state (enable disabled) and linger
54                                              timeout */
55         void linger(bool enable, unsigned timeout=0) const; ///< Change linger status
56                                         /**< If linger is enabled, the timeout value specifies, how
57                                              long to wait before returning while data is unsent in
58                                              seconds. If this value is 0, a close() might wait
59                                              forever.
60                                              \param[in] enable \c true to activate linger
61                                              \param[in] timeout linger timeout in seconds */
62        boost::uint8_t priority() const;  ///< Get packet priority assigned to outgoing packets
63                                         /**< This call will return the priority value assigned to
64                                              packets sent via this socket. Depending on the
65                                              protocol, this value may also be placed inside the
66                                              packet headers (for IPv4, this is the TOS value).
67                                              \returns current socket priority */
68         void priority(boost::uint8_t value) const; ///< Set packet priority (e.g. TOS)
69                                         /**< Changes the packet queueing priority. Additionally may
70                                              set protocol specific options. For IPv4 sockets, it
71                                              sets the TOS field.
72                                              \param[in] value new socket priority */
73
74         int error() const;              ///< Get and clear pending socket error
75                                         /**< This call will get <em>and clear</em> a pending socket
76                                              error. This includes asynchronous errors received via
77                                              the network (e.g. via ICMP). */
78
79         unsigned rcvbuf() const;        ///< Check receive buffer size
80                                         /**< \returns size of receive buffer in bytes
81                                              \internal Linux doubles the buffer size internally when
82                                                  changing it to cater for additional space needed by
83                                                  the linux kernel. This call will therefore return
84                                                  only half the value reported by the kernel. */
85         void rcvbuf(unsigned size) const; ///< Change receive buffer size
86                                         /**< \param[in] size new receive buffer size */
87
88         unsigned sndbuf() const;        ///< Check send buffer size
89                                         /**< \returns size of send buffer in bytes
90                                              \internal Linux doubles the buffer size internally when
91                                                  changing it to cater for additional space needed by
92                                                  the linux kernel. This call will therefore return
93                                                  only half the value reported by the kernel. */
94         void sndbuf(unsigned size) const; ///< Change size of send buffer
95                                         /**< \param[in] size new send buffer size */
96
97      };
98
99     /** \brief Protocol facet providing basic connection oriented BSD socket functions
100
101         AddressableBSDSocketProtocol provides the BSD socket API as it generically applies to
102         addressable (connection oriented) sockets.
103      */
104     class AddressableBSDSocketProtocol
105         : public virtual SocketProtocol
106     {
107     public:
108         bool reuseaddr() const;         ///< Return current reuseaddr state
109                                         /**< \returns \c true if \c SO_REUSEADDR is currently
110                                              enabled, \c false otherwise*/
111         void reuseaddr(bool value) const; ///< Set reuseraddr state
112                                         /**< A \c true value enables \c SO_REUSEADDR, \c false will
113                                              disable it.
114                                              \param[in] value new \c SO_REUSEADDR state */
115     };
116
117     //\}
118
119 }
120
121
122 //-/////////////////////////////////////////////////////////////////////////////////////////////////
123 //#include "BSDSocketProtocol.cci"
124 //#include "BSDSocketProtocol.ct"
125 //#include "BSDSocketProtocol.cti"
126 //#include "BSDSocketProtocol.mpp"
127 #endif
128
129 \f
130 // Local Variables:
131 // mode: c++
132 // fill-column: 100
133 // c-file-style: "senf"
134 // indent-tabs-mode: nil
135 // ispell-local-dictionary: "american"
136 // compile-command: "scons -u test"
137 // comment-column: 40
138 // End: