switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Socket / Protocols / INet / TCPSocketProtocol.hh
1 // $Id$
2 //
3 // Copyright (C) 2006
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 //
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at 
9 // http://senf.berlios.de/license.html
10 //
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on, 
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
14 //
15 // Software distributed under the License is distributed on an "AS IS" basis, 
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
17 // for the specific language governing rights and limitations under the License.
18 //
19 // The Original Code is Fraunhofer FOKUS code.
20 //
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
24 //
25 // Contributor(s):
26 //   Stefan Bund <g0dil@berlios.de>
27
28 /** \file
29     \brief TCPSocketProtocol public header
30  */
31
32 #ifndef HH_SENF_Socket_Protocols_INet_TCPSocketProtocol_
33 #define HH_SENF_Socket_Protocols_INet_TCPSocketProtocol_ 1
34
35 // Custom includes
36 #include "INetSocketProtocol.hh"
37
38 //#include "TCPSocketProtocol.mpp"
39 //-/////////////////////////////////////////////////////////////////////////////////////////////////
40
41 namespace senf {
42
43     /// \addtogroup protocol_facets_group
44     //\{
45
46     /** \brief Protocol facet to support TCP operations
47
48         This protocol facet provides all those protocol functions,
49         which are available on any TCP socket.
50      */
51     class TCPSocketProtocol
52         : public virtual INetSocketProtocol
53     {
54     public:
55         bool nodelay() const;           ///< Check current \c SO_NODELAY status
56         void nodelay(bool value) const; ///< Set \c SO_NODELAY status
57                                         /**< Enabling \c SO_NODELAY will disable the NAGLE
58                                              algorithm (which aggregates multiple writes into a
59                                              single network packet). Enabling nodelay() optimizes
60                                              the response time at the expense of the bandwidth
61                                              efficiency.
62                                              \param[in] value \c SO_NODELAY state */
63
64         unsigned siocinq() const;       ///< Return current size of the input queue
65         unsigned siocoutq() const;      ///< Return current size of the output queue
66
67         enum ShutType { ShutRD, ShutWR, ShutRDWR };
68         void shutdown(ShutType type) const;
69
70         ///\name Abstract Interface Implementation
71         //\{
72
73         void close();
74         unsigned available() const;
75         bool eof() const;
76
77         //\}
78     };
79
80     //\}
81 }
82
83 //-/////////////////////////////////////////////////////////////////////////////////////////////////
84 //#include "TCPSocketProtocol.cci"
85 //#include "TCPSocketProtocol.ct"
86 //#include "TCPSocketProtocol.cti"
87 #endif
88
89 \f
90 // Local Variables:
91 // mode: c++
92 // fill-column: 100
93 // c-file-style: "senf"
94 // indent-tabs-mode: nil
95 // ispell-local-dictionary: "american"
96 // compile-command: "scons -u test"
97 // comment-column: 40
98 // End: