Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > contrib > by-pkgid > 68d373e54fb21da3730c08bede406633 > files > 830

libCommonC++1.9_3-devel-1.9.4-2mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>socket.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.10 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="namespacemembers.html">Namespace Members</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>socket.h</h1><a href="socket_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">// Copyright (C) 1999-2001 Open Source Telecom Corporation.</font>
00002 <font class="comment">//  </font>
00003 <font class="comment">// This program is free software; you can redistribute it and/or modify</font>
00004 <font class="comment">// it under the terms of the GNU General Public License as published by</font>
00005 <font class="comment">// the Free Software Foundation; either version 2 of the License, or</font>
00006 <font class="comment">// (at your option) any later version.</font>
00007 <font class="comment">// </font>
00008 <font class="comment">// This program is distributed in the hope that it will be useful,</font>
00009 <font class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</font>
00010 <font class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</font>
00011 <font class="comment">// GNU General Public License for more details.</font>
00012 <font class="comment">// </font>
00013 <font class="comment">// You should have received a copy of the GNU General Public License</font>
00014 <font class="comment">// along with this program; if not, write to the Free Software </font>
00015 <font class="comment">// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</font>
00016 <font class="comment">// </font>
00017 <font class="comment">// As a special exception to the GNU General Public License, permission is </font>
00018 <font class="comment">// granted for additional uses of the text contained in its release </font>
00019 <font class="comment">// of Common C++.</font>
00020 <font class="comment">// </font>
00021 <font class="comment">// The exception is that, if you link the Common C++ library with other files</font>
00022 <font class="comment">// to produce an executable, this does not by itself cause the</font>
00023 <font class="comment">// resulting executable to be covered by the GNU General Public License.</font>
00024 <font class="comment">// Your use of that executable is in no way restricted on account of</font>
00025 <font class="comment">// linking the Common C++ library code into it.</font>
00026 <font class="comment">//</font>
00027 <font class="comment">// This exception does not however invalidate any other reasons why</font>
00028 <font class="comment">// the executable file might be covered by the GNU General Public License.</font>
00029 <font class="comment">//</font>
00030 <font class="comment">// This exception applies only to the code released under the </font>
00031 <font class="comment">// name Common C++.  If you copy code from other releases into a copy of</font>
00032 <font class="comment">// Common C++, as the General Public License permits, the exception does</font>
00033 <font class="comment">// not apply to the code that you add in this way.  To avoid misleading</font>
00034 <font class="comment">// anyone as to the status of such modified files, you must delete</font>
00035 <font class="comment">// this exception notice from them.</font>
00036 <font class="comment">// </font>
00037 <font class="comment">// If you write modifications of your own for Common C++, it is your choice</font>
00038 <font class="comment">// whether to permit this exception to apply to your modifications.</font>
00039 <font class="comment">// If you do not wish that, delete this exception notice.  </font>
00040 
00041 <font class="preprocessor">#ifndef CCXX_SOCKET_H_</font>
00042 <font class="preprocessor"></font><font class="preprocessor">#define CCXX_SOCKET_H_</font>
00043 <font class="preprocessor"></font>
00044 <font class="preprocessor">#ifndef CCXX_CONFIG_H_</font>
00045 <font class="preprocessor"></font><font class="preprocessor">#include &lt;cc++/config.h&gt;</font>
00046 <font class="preprocessor">#endif</font>
00047 <font class="preprocessor"></font>
00048 <font class="preprocessor">#ifndef CCXX_THREAD_H_</font>
00049 <font class="preprocessor"></font><font class="preprocessor">#include &lt;<a class="code" href="thread_8h.html">cc++/thread.h</a>&gt;</font>
00050 <font class="preprocessor">#endif</font>
00051 <font class="preprocessor"></font>
00052 <font class="preprocessor">#ifdef WIN32</font>
00053 <font class="preprocessor"></font><font class="preprocessor">#include &lt;winsock.h&gt;</font>
00054 <font class="preprocessor">#define TIMEOUT_INF ~((timeout_t) 0)</font>
00055 <font class="preprocessor"></font><font class="keyword">typedef</font> <font class="keywordtype">int</font> socklen_t;
00056 <font class="preprocessor">#else</font>
<a name="l00057"></a><a class="code" href="socket_8h.html#a0">00057</a> <font class="preprocessor"></font><font class="preprocessor">#define INVALID_SOCKET  -1</font>
<a name="l00058"></a><a class="code" href="socket_8h.html#a2">00058</a> <font class="preprocessor"></font><font class="keyword">typedef</font> <font class="keywordtype">int</font> SOCKET;
00059 <font class="preprocessor">#endif</font>
00060 <font class="preprocessor"></font>
00061 <font class="preprocessor">#include &lt;iostream&gt;</font>
00062 
00063 <font class="preprocessor">#ifndef MSG_DONTWAIT</font>
<a name="l00064"></a><a class="code" href="socket_8h.html#a1">00064</a> <font class="preprocessor"></font><font class="preprocessor">#define MSG_DONTWAIT    0</font>
00065 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00066 <font class="preprocessor"></font>
00067 <font class="preprocessor">#ifdef  CCXX_NAMESPACES</font>
00068 <font class="preprocessor"></font><font class="keyword">namespace </font>ost {
00069 <font class="preprocessor">#endif</font>
00070 <font class="preprocessor"></font>
<a name="l00075"></a><a class="code" href="namespaceost.html#a249">00075</a> <font class="keyword">enum</font> sockstate_t
00076 {
00077         SOCKET_INITIAL,
00078         SOCKET_AVAILABLE,
00079         SOCKET_BOUND,
00080         SOCKET_CONNECTED,
00081         SOCKET_CONNECTING,
00082         SOCKET_STREAM
00083 };
<a name="l00084"></a><a class="code" href="namespaceost.html#a93">00084</a> <font class="keyword">typedef</font> <font class="keyword">enum</font> sockstate_t sockstate_t;
00085 
<a name="l00086"></a><a class="code" href="namespaceost.html#a250">00086</a> <font class="keyword">enum</font> sockerror_t
00087 {
00088         SOCKET_SUCCESS = 0,
00089         SOCKET_CREATE_FAILED,
00090         SOCKET_COPY_FAILED,
00091         SOCKET_INPUT_ERROR,
00092         SOCKET_INPUT_INTERRUPT,
00093         SOCKET_RESOURCE_FAILURE,
00094         SOCKET_OUTPUT_ERROR,
00095         SOCKET_OUTPUT_INTERRUPT,
00096         SOCKET_NOT_CONNECTED,
00097         SOCKET_CONNECT_REFUSED,
00098         SOCKET_CONNECT_REJECTED,
00099         SOCKET_CONNECT_TIMEOUT,
00100         SOCKET_CONNECT_FAILED,
00101         SOCKET_CONNECT_INVALID,
00102         SOCKET_CONNECT_BUSY,
00103         SOCKET_CONNECT_NOROUTE,
00104         SOCKET_BINDING_FAILED,
00105         SOCKET_BROADCAST_DENIED,
00106         SOCKET_ROUTING_DENIED,
00107         SOCKET_KEEPALIVE_DENIED,
00108         SOCKET_SERVICE_DENIED,
00109         SOCKET_SERVICE_UNAVAILABLE,
00110         SOCKET_MULTICAST_DISABLED,
00111         SOCKET_TIMEOUT_ERROR,
00112         SOCKET_NODELAY_ERROR,
00113         SOCKET_EXTENDED_ERROR
00114 };
<a name="l00115"></a><a class="code" href="namespaceost.html#a94">00115</a> <font class="keyword">typedef</font> <font class="keyword">enum</font> sockerror_t sockerror_t;
00116 
<a name="l00117"></a><a class="code" href="namespaceost.html#a251">00117</a> <font class="keyword">enum</font> socktos_t
00118 {
00119         SOCKET_IPTOS_LOWDELAY,
00120         SOCKET_IPTOS_THROUGHPUT,
00121         SOCKET_IPTOS_RELIABILITY,
00122         SOCKET_IPTOS_MINCOST,
00123         SOCKET_IPTOS_INVALID
00124 };
<a name="l00125"></a><a class="code" href="namespaceost.html#a95">00125</a> <font class="keyword">typedef</font> <font class="keyword">enum</font> socktos_t socktos_t;
00126 
<a name="l00127"></a><a class="code" href="namespaceost.html#a252">00127</a> <font class="keyword">enum</font> sockpend_t
00128 {
00129         SOCKET_PENDING_INPUT,
00130         SOCKET_PENDING_OUTPUT,
00131         SOCKET_PENDING_ERROR
00132 };
<a name="l00133"></a><a class="code" href="namespaceost.html#a96">00133</a> <font class="keyword">typedef</font> <font class="keyword">enum</font> sockpend_t sockpend_t;
00134 
<a name="l00138"></a><a class="code" href="namespaceost.html#a97">00138</a> <font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> tpport_t;
00139 
00140 <font class="keyword">class </font>CCXX_CLASS_EXPORT InetAddress;
00141 <font class="keyword">class </font>CCXX_CLASS_EXPORT InetHostAddress;
00142 <font class="keyword">class </font>CCXX_CLASS_EXPORT InetMaskAddress;
00143 <font class="keyword">class </font>CCXX_CLASS_EXPORT BroadcastAddress;
00144 <font class="keyword">class </font>CCXX_CLASS_EXPORT Socket;
00145 <font class="keyword">class </font>CCXX_CLASS_EXPORT UDPSocket;
00146 <font class="keyword">class </font>CCXX_CLASS_EXPORT UDPBroadcast;
00147 <font class="keyword">class </font>CCXX_CLASS_EXPORT UDPTransmit;
00148 <font class="keyword">class </font>CCXX_CLASS_EXPORT UDPReceive;
00149 <font class="keyword">class </font>CCXX_CLASS_EXPORT UDPDuplex;
00150 <font class="keyword">class </font>CCXX_CLASS_EXPORT TCPSocket;
00151 <font class="keyword">class </font>CCXX_CLASS_EXPORT TCPStream;
00152 <font class="keyword">class </font>CCXX_CLASS_EXPORT <a class="code" href="classtcpstream.html">tcpstream</a>;
00153 <font class="keyword">class </font>CCXX_CLASS_EXPORT TCPSession;
00154 
<a name="l00163"></a><a class="code" href="classost_1_1_inet_addr_validator.html">00163</a> <font class="keyword">class </font>InetAddrValidator 
00164 {
00165 <font class="keyword">public</font>:
<a name="l00169"></a><a class="code" href="classost_1_1_inet_addr_validator.html#a0">00169</a>         <a class="code" href="classost_1_1_inet_addr_validator.html#a0">InetAddrValidator</a>()<font class="keyword"> </font>{ };
00170 
00175         <font class="keyword">inline</font> <font class="keyword">virtual</font> <font class="keywordtype">void</font> 
00176         <a class="code" href="classost_1_1_inet_addr_validator.html#a1">operator()</a>(<font class="keyword">const</font> in_addr address) <font class="keyword">const</font> = 0;
00177 };
00178 
<a name="l00187"></a><a class="code" href="classost_1_1_inet_mcast_addr_validator.html">00187</a> <font class="keyword">class </font>InetMcastAddrValidator: <font class="keyword">public</font> InetAddrValidator
00188 {
00189 <font class="keyword">public</font>:
<a name="l00193"></a><a class="code" href="classost_1_1_inet_mcast_addr_validator.html#a0">00193</a>         <a class="code" href="classost_1_1_inet_mcast_addr_validator.html#a0">InetMcastAddrValidator</a>()<font class="keyword"></font>{};
00194 
00199         <font class="keyword">inline</font> <font class="keywordtype">void</font> 
00200         <a class="code" href="classost_1_1_inet_mcast_addr_validator.html#a1">operator()</a>(<font class="keyword">const</font> in_addr address) <font class="keyword">const</font>; 
00201 <font class="keyword">private</font>:
00202 <font class="preprocessor">#if __BYTE_ORDER == __BIG_ENDIAN</font>
00203 <font class="preprocessor"></font>        <font class="keyword">enum</font> {
00204                 MCAST_VALID_MASK = 0xF0000000,
00205                 MCAST_VALID_VALUE = 0xE0000000
00206         };
00207 <font class="preprocessor">#else</font>
00208 <font class="preprocessor"></font>        <font class="keyword">enum</font> { 
00209                 MCAST_VALID_MASK = 0x000000F0,
00210                 MCAST_VALID_VALUE = 0x000000E0 
00211         };
00212 <font class="preprocessor">#endif</font>
00213 <font class="preprocessor"></font>};
00214 
<a name="l00229"></a><a class="code" href="classost_1_1_inet_address.html">00229</a> <font class="keyword">class </font>InetAddress
00230 {
00231 <font class="keyword">private</font>:
00232         <font class="comment">// The validator given to an InetAddress object must not be a</font>
00233         <font class="comment">// transient object, but that must exist at least until the</font>
00234         <font class="comment">// last address object of its kind is deleted. This is an</font>
00235         <font class="comment">// artifact to be able to do specific checks for derived</font>
00236         <font class="comment">// classes inside constructors.</font>
00237         <font class="keyword">const</font> InetAddrValidator *validator;
00238 
00239 <font class="keyword">protected</font>:
<a name="l00240"></a><a class="code" href="classost_1_1_inet_address.html#n0">00240</a>         <font class="keyword">struct </font>in_addr * ipaddr;
<a name="l00241"></a><a class="code" href="classost_1_1_inet_address.html#n1">00241</a>         size_t addr_count;
00242 <font class="preprocessor">#if defined(WIN32)</font>
00243 <font class="preprocessor"></font>        <font class="keyword">static</font> MutexCounter counter;
00244 <font class="preprocessor">#else</font>
<a name="l00245"></a><a class="code" href="classost_1_1_inet_address.html#q0">00245</a> <font class="preprocessor"></font>        <font class="keyword">static</font> Mutex mutex;
00246 <font class="preprocessor">#endif</font>
00247 <font class="preprocessor"></font>
00254         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_inet_address.html#b0">setIPAddress</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *host);
00255 
00262         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_inet_address.html#b1">setAddress</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *host);
00263 
00264 <font class="keyword">public</font>:
00272         <a class="code" href="classost_1_1_inet_address.html#a0">InetAddress</a>(<font class="keyword">const</font> InetAddrValidator *validator = NULL);
00273 
00282         <a class="code" href="classost_1_1_inet_address.html#a0">InetAddress</a>(<font class="keyword">struct</font> in_addr addr, <font class="keyword">const</font> InetAddrValidator *validator = NULL);
00283 
00294         <a class="code" href="classost_1_1_inet_address.html#a0">InetAddress</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *address, <font class="keyword">const</font> InetAddrValidator *validator = NULL);
00295 
00299         <a class="code" href="classost_1_1_inet_address.html#a0">InetAddress</a>(<font class="keyword">const</font> InetAddress &amp;rhs);
00300 
00304         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_inet_address.html#a4">~InetAddress</a>();
00305 
00312         <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="classost_1_1_inet_address.html#a5">getHostname</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>;
00313 
00321         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_inet_address.html#a6">isInetAddress</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>;
00322 
00330         <font class="keyword">struct </font>in_addr getAddress(void) const;
00331 
00343         <font class="keyword">struct </font>in_addr getAddress(size_t i) const;
00344 
<a name="l00350"></a><a class="code" href="classost_1_1_inet_address.html#a9">00350</a>         size_t <a class="code" href="classost_1_1_inet_address.html#a9">getAddressCount</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> addr_count; }
00351 
00352         InetAddress &amp;<a class="code" href="classost_1_1_inet_address.html#a10">operator=</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *str);
00353         InetAddress &amp;<a class="code" href="classost_1_1_inet_address.html#a10">operator=</a>(<font class="keyword">struct</font> in_addr addr);
00354         InetAddress &amp;<a class="code" href="classost_1_1_inet_address.html#a10">operator=</a>(<font class="keyword">const</font> InetAddress &amp;rhs);
00355 
00360         InetAddress &amp;<a class="code" href="classost_1_1_inet_address.html#a10">operator=</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> addr);
00361 
<a name="l00362"></a><a class="code" href="classost_1_1_inet_address.html#a14">00362</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_inet_address.html#a14">operator!</a>()<font class="keyword"> const</font>
00363 <font class="keyword">                </font>{<font class="keywordflow">return</font> !<a class="code" href="classost_1_1_inet_address.html#a6">isInetAddress</a>();};
00364 
00373         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_inet_address.html#a15">operator==</a>(<font class="keyword">const</font> InetAddress &amp;a) <font class="keyword">const</font>;
00374 
00382         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_inet_address.html#a16">operator!=</a>(<font class="keyword">const</font> InetAddress &amp;a) <font class="keyword">const</font>;
00383 };      
00384 
<a name="l00397"></a><a class="code" href="classost_1_1_inet_mask_address.html">00397</a> <font class="keyword">class </font>InetMaskAddress : <font class="keyword">public</font> InetAddress
00398 {
00399 <font class="keyword">public</font>:
00406         <a class="code" href="classost_1_1_inet_mask_address.html#a0">InetMaskAddress</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *mask);
00407 
00418         <font class="keyword">friend</font> InetHostAddress <a class="code" href="classost_1_1_inet_mask_address.html#l0">operator&amp;</a>(<font class="keyword">const</font> InetHostAddress &amp;addr, 
00419                                          <font class="keyword">const</font> InetMaskAddress &amp;mask);
00420 
<a name="l00425"></a><a class="code" href="classost_1_1_inet_mask_address.html#a1">00425</a>         InetAddress &amp;<a class="code" href="classost_1_1_inet_mask_address.html#a1">operator=</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> addr)<font class="keyword"> </font>
00426 <font class="keyword">        </font>{ <font class="keywordflow">return</font> InetAddress::operator =(addr); }
00427 };
00428 
<a name="l00436"></a><a class="code" href="classost_1_1_inet_host_address.html">00436</a> <font class="keyword">class </font>InetHostAddress : <font class="keyword">public</font> InetAddress
00437 {
00438 <font class="keyword">public</font>: 
00451         <a class="code" href="classost_1_1_inet_host_address.html#a0">InetHostAddress</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *host = NULL);
00452 
00460         <a class="code" href="classost_1_1_inet_host_address.html#a0">InetHostAddress</a>(<font class="keyword">struct</font> in_addr addr);
00461 
<a name="l00466"></a><a class="code" href="classost_1_1_inet_host_address.html#a2">00466</a>         InetAddress &amp;<a class="code" href="classost_1_1_inet_host_address.html#a2">operator=</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> addr)<font class="keyword"> </font>
00467 <font class="keyword">        </font>{ <font class="keywordflow">return</font> InetAddress::operator =(addr); }
00468 
00473         InetHostAddress &amp;<a class="code" href="classost_1_1_inet_host_address.html#a3">operator&amp;=</a>(<font class="keyword">const</font> InetMaskAddress &amp;mask);
00474 
<a name="l00475"></a><a class="code" href="classost_1_1_inet_host_address.html#l0">00475</a>         <font class="keyword">friend</font> <font class="keyword">class </font>InetMaskAddress;
00476         <font class="keyword">friend</font> InetHostAddress <a class="code" href="classost_1_1_inet_host_address.html#l1">operator&amp;</a>(<font class="keyword">const</font> InetHostAddress &amp;addr, 
00477                                          <font class="keyword">const</font> InetMaskAddress &amp;mask);
00478 };
00479 
<a name="l00484"></a><a class="code" href="classost_1_1_broadcast_address.html">00484</a> <font class="keyword">class </font>BroadcastAddress : <font class="keyword">public</font> InetAddress
00485 {
00486 <font class="keyword">public</font>:
00494         <a class="code" href="classost_1_1_broadcast_address.html#a0">BroadcastAddress</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *net = <font class="stringliteral">"255.255.255.255"</font>);
00495 };
00496 
<a name="l00506"></a><a class="code" href="classost_1_1_inet_mcast_address.html">00506</a> <font class="keyword">class </font>InetMcastAddress: <font class="keyword">public</font> InetAddress
00507 {
00508 <font class="keyword">public</font>:
00513         <a class="code" href="classost_1_1_inet_mcast_address.html#a0">InetMcastAddress</a>();
00514 
00521         <a class="code" href="classost_1_1_inet_mcast_address.html#a0">InetMcastAddress</a>(<font class="keyword">const</font> <font class="keyword">struct</font> in_addr address);
00522 
00532         <a class="code" href="classost_1_1_inet_mcast_address.html#a0">InetMcastAddress</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *address);
00533         
00534 <font class="keyword">private</font>:
00542         <font class="keyword">static</font> <font class="keyword">const</font> InetMcastAddrValidator validator;
00543 };
00544 
<a name="l00562"></a><a class="code" href="classost_1_1_socket.html">00562</a> <font class="keyword">class </font>Socket
00563 {
00564 <font class="keyword">private</font>:
00565         <font class="comment">// used by exception handlers....</font>
00566         <font class="keyword">mutable</font> sockerror_t errid;
00567         <font class="keyword">mutable</font> <font class="keyword">const</font> <font class="keywordtype">char</font> *errstr;
00568 
00569         <font class="keywordtype">void</font> setSocket(<font class="keywordtype">void</font>);
00570 
00571 <font class="keyword">protected</font>:
00572         <font class="keyword">mutable</font> <font class="keyword">struct</font>
00573 <font class="keyword">        </font>{
<a name="l00574"></a><a class="code" href="classost_1_1_socket.html#n0">00574</a>                 <font class="keywordtype">bool</font> thrown: 1;
<a name="l00575"></a><a class="code" href="classost_1_1_socket.html#n1">00575</a>                 <font class="keywordtype">bool</font> broadcast: 1;
<a name="l00576"></a><a class="code" href="classost_1_1_socket.html#n2">00576</a>                 <font class="keywordtype">bool</font> route: 1;
<a name="l00577"></a><a class="code" href="classost_1_1_socket.html#n3">00577</a>                 <font class="keywordtype">bool</font> keepalive: 1;
<a name="l00578"></a><a class="code" href="classost_1_1_socket.html#n4">00578</a>                 <font class="keywordtype">bool</font> loopback: 1;
<a name="l00579"></a><a class="code" href="classost_1_1_socket.html#n5">00579</a>                 <font class="keywordtype">bool</font> multicast: 1;
<a name="l00580"></a><a class="code" href="classost_1_1_socket.html#n6">00580</a>                 <font class="keywordtype">bool</font> completion: 1;
<a name="l00581"></a><a class="code" href="classost_1_1_socket.html#n7">00581</a>                 <font class="keywordtype">bool</font> linger: 1;
<a name="l00582"></a><a class="code" href="classost_1_1_socket.html#n8">00582</a>                 <font class="keywordtype">unsigned</font> ttl: 8;
00583         } flags;
00584 
<a name="l00590"></a><a class="code" href="classost_1_1_socket.html#n10">00590</a>         SOCKET so;
<a name="l00591"></a><a class="code" href="classost_1_1_socket.html#n11">00591</a>         sockstate_t state;
00592 
00600         sockerror_t <a class="code" href="classost_1_1_socket.html#b0">Error</a>(sockerror_t error, <font class="keywordtype">char</font> *errstr = NULL) <font class="keyword">const</font>;
00601 
<a name="l00608"></a><a class="code" href="classost_1_1_socket.html#b1">00608</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket.html#b0">Error</a>(<font class="keywordtype">char</font> *estr)<font class="keyword"></font>
00609 <font class="keyword">                </font>{<a class="code" href="classost_1_1_socket.html#b0">Error</a>(SOCKET_EXTENDED_ERROR, estr);};
00610         
<a name="l00617"></a><a class="code" href="classost_1_1_socket.html#b2">00617</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket.html#b2">setError</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
00618 <font class="keyword">                </font>{flags.thrown = !enable;};
00619 
00625         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket.html#b3">endSocket</a>(<font class="keywordtype">void</font>);
00626 
00632         sockerror_t <a class="code" href="classost_1_1_socket.html#b4">connectError</a>(<font class="keywordtype">void</font>);
00633 
00642         sockerror_t <a class="code" href="classost_1_1_socket.html#b5">setBroadcast</a>(<font class="keywordtype">bool</font> enable);
00643 
00654         sockerror_t <a class="code" href="classost_1_1_socket.html#b6">setMulticast</a>(<font class="keywordtype">bool</font> enable);
00655 
00663         sockerror_t <a class="code" href="classost_1_1_socket.html#b7">setLoopback</a>(<font class="keywordtype">bool</font> enable);
00664 
00671         sockerror_t <a class="code" href="classost_1_1_socket.html#b8">setTimeToLive</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> ttl);
00672 
00679         sockerror_t <a class="code" href="classost_1_1_socket.html#b9">Join</a>(<font class="keyword">const</font> InetMcastAddress &amp;ia);
00680 
00687         sockerror_t <a class="code" href="classost_1_1_socket.html#b10">Drop</a>(<font class="keyword">const</font> InetMcastAddress &amp;ia);
00688 
00696         sockerror_t <a class="code" href="classost_1_1_socket.html#b11">setRouting</a>(<font class="keywordtype">bool</font> enable);
00697 
00698 
00705         sockerror_t <a class="code" href="classost_1_1_socket.html#b12">setNoDelay</a>(<font class="keywordtype">bool</font> enable);
00706 
00718         <a class="code" href="classost_1_1_socket.html#b13">Socket</a>(<font class="keywordtype">int</font> domain, <font class="keywordtype">int</font> type, <font class="keywordtype">int</font> protocol = 0);
00719 
00727         <a class="code" href="classost_1_1_socket.html#b13">Socket</a>(SOCKET fd);
00728 
00736         <a class="code" href="classost_1_1_socket.html#b13">Socket</a>(<font class="keyword">const</font> Socket &amp;source);
00737 
00747         ssize_t <a class="code" href="classost_1_1_socket.html#b16">Readline</a>(<font class="keywordtype">char</font> *buf, size_t len, timeout_t timeout = 0);
00748 
00749 <font class="keyword">public</font>:
00757         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_socket.html#a0">~Socket</a>();
00758 
00762         Socket &amp;<a class="code" href="classost_1_1_socket.html#a1">operator=</a>(<font class="keyword">const</font> Socket &amp;from);
00763 
00773         InetHostAddress <a class="code" href="classost_1_1_socket.html#a2">getSender</a>(tpport_t *port = NULL) <font class="keyword">const</font>;
00774 
00784         InetHostAddress <a class="code" href="classost_1_1_socket.html#a3">getPeer</a>(tpport_t *port = NULL) <font class="keyword">const</font>;
00785 
00793         InetHostAddress <a class="code" href="classost_1_1_socket.html#a4">getLocal</a>(tpport_t *port = NULL) <font class="keyword">const</font>;
00794         
00805         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket.html#a5">setCompletion</a>(<font class="keywordtype">bool</font> immediate);
00806 
00812         sockerror_t <a class="code" href="classost_1_1_socket.html#a6">setLinger</a>(<font class="keywordtype">bool</font> linger);
00813 
00821         sockerror_t <a class="code" href="classost_1_1_socket.html#a7">setKeepAlive</a>(<font class="keywordtype">bool</font> enable);
00822 
00831         sockerror_t <a class="code" href="classost_1_1_socket.html#a8">setTypeOfService</a>(socktos_t service);
00832 
00841         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_socket.html#a9">isConnected</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>;
00842 
00850         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_socket.html#a10">isActive</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>;
00851 
00856         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_socket.html#a11">operator!</a>() <font class="keyword">const</font>;
00857 
<a name="l00864"></a><a class="code" href="classost_1_1_socket.html#a12">00864</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_socket.html#a12">isBroadcast</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00865 <font class="keyword">                </font>{<font class="keywordflow">return</font> flags.broadcast;};
00866 
<a name="l00872"></a><a class="code" href="classost_1_1_socket.html#a13">00872</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_socket.html#a13">isRouted</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00873 <font class="keyword">                </font>{<font class="keywordflow">return</font> flags.route;};
00874 
<a name="l00881"></a><a class="code" href="classost_1_1_socket.html#a14">00881</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_socket.html#a14">getErrorNumber</a>(<font class="keywordtype">void</font>)<font class="keyword"> const </font>{<font class="keywordflow">return</font> errid;}
00882         
<a name="l00889"></a><a class="code" href="classost_1_1_socket.html#a15">00889</a>         <font class="keyword">inline</font> <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="classost_1_1_socket.html#a15">getErrorString</a>(<font class="keywordtype">void</font>)<font class="keyword"> const </font>{<font class="keywordflow">return</font> errstr;}
00890 
00900         <font class="keyword">virtual</font> <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_socket.html#a16">isPending</a>(sockpend_t pend, timeout_t timeout = TIMEOUT_INF);
00901 };
00902 
<a name="l00935"></a><a class="code" href="classost_1_1_u_d_p_socket.html">00935</a> <font class="keyword">class </font>UDPSocket : <font class="keyword">public</font> Socket
00936 {
00937 <font class="keyword">private</font>:
00938         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_socket.html#a7">setKeepAlive</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
00939 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::setKeepAlive(enable);};
00940 
00941 <font class="keyword">protected</font>:
<a name="l00942"></a><a class="code" href="classost_1_1_u_d_p_socket.html#n0">00942</a>         <font class="keyword">struct </font>sockaddr_in peer;
00943 
00944 <font class="keyword">public</font>:
00948         <a class="code" href="classost_1_1_u_d_p_socket.html#a0">UDPSocket</a>(<font class="keywordtype">void</font>);
00949 
00959         <a class="code" href="classost_1_1_u_d_p_socket.html#a0">UDPSocket</a>(<font class="keyword">const</font> InetAddress &amp;bind, tpport_t port);
00960 
00964         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_u_d_p_socket.html#a2">~UDPSocket</a>();
00965 
00973         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_u_d_p_socket.html#a3">setPeer</a>(<font class="keyword">const</font> InetHostAddress &amp;host, tpport_t port);
00974 
<a name="l00982"></a><a class="code" href="classost_1_1_u_d_p_socket.html#a4">00982</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_u_d_p_socket.html#a4">Send</a>(<font class="keyword">const</font> <font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
00983 <font class="keyword">                </font>{return ::sendto(so, (<font class="keyword">const</font> <font class="keywordtype">char</font>*)buf, len, 0, (<font class="keyword">struct </font>sockaddr *)&amp;peer, (socklen_t)sizeof(peer));};
00984 
<a name="l00992"></a><a class="code" href="classost_1_1_u_d_p_socket.html#a5">00992</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_u_d_p_socket.html#a5">Recv</a>(<font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
00993 <font class="keyword">                </font>{return ::recv(so, (<font class="keywordtype">char</font> *)buf, len, 0);};
00994 
01003         InetHostAddress <a class="code" href="classost_1_1_u_d_p_socket.html#a6">getPeer</a>(tpport_t *port = NULL) <font class="keyword">const</font>;
01004 
<a name="l01012"></a><a class="code" href="classost_1_1_u_d_p_socket.html#a7">01012</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_u_d_p_socket.html#a7">Peek</a>(<font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
01013 <font class="keyword">                </font>{return ::recv(so, (<font class="keywordtype">char</font> *)buf, len, MSG_PEEK);};
01014 };
01015 
01016 
<a name="l01025"></a><a class="code" href="classost_1_1_u_d_p_broadcast.html">01025</a> <font class="keyword">class </font>UDPBroadcast : <font class="keyword">public</font> UDPSocket
01026 {
01027 <font class="keyword">private</font>:
01028         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_u_d_p_broadcast.html#a1">setPeer</a>(<font class="keyword">const</font> InetHostAddress &amp;ia, tpport_t port)<font class="keyword"> </font>{};
01029 
01030         sockerror_t <a class="code" href="classost_1_1_socket.html#b5">setBroadcast</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01031 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::setBroadcast(enable);};
01032 
01033 <font class="keyword">public</font>:
01040         <a class="code" href="classost_1_1_u_d_p_broadcast.html#a0">UDPBroadcast</a>(<font class="keyword">const</font> InetAddress &amp;ia, tpport_t port);
01041 
01048         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_u_d_p_broadcast.html#a1">setPeer</a>(<font class="keyword">const</font> BroadcastAddress &amp;subnet, tpport_t port);
01049 };      
01050 
<a name="l01059"></a><a class="code" href="classost_1_1_u_d_p_transmit.html">01059</a> <font class="keyword">class </font>UDPTransmit : <font class="keyword">private</font> UDPSocket
01060 {
01061 <font class="keyword">private</font>:
01069         sockerror_t CConnect(<font class="keyword">const</font> InetAddress &amp;ia, tpport_t port);
01070 
01071 <font class="keyword">protected</font>:
01075         <a class="code" href="classost_1_1_u_d_p_transmit.html#b0">UDPTransmit</a>();
01076 
01089         <a class="code" href="classost_1_1_u_d_p_transmit.html#b0">UDPTransmit</a>(<font class="keyword">const</font> InetAddress &amp;bind, tpport_t port = 5005);
01090 
01099         sockerror_t <a class="code" href="classost_1_1_u_d_p_transmit.html#b2">Connect</a>(<font class="keyword">const</font> InetHostAddress &amp;host, tpport_t port);
01100 
01109         sockerror_t <a class="code" href="classost_1_1_u_d_p_transmit.html#b2">Connect</a>(<font class="keyword">const</font> BroadcastAddress &amp;subnet, tpport_t port);
01110 
01118         sockerror_t <a class="code" href="classost_1_1_u_d_p_transmit.html#b2">Connect</a>(<font class="keyword">const</font> InetMcastAddress &amp;group, tpport_t port);
01119 
01124         sockerror_t <a class="code" href="classost_1_1_u_d_p_transmit.html#b5">Disconnect</a>(<font class="keywordtype">void</font>);
01125 
<a name="l01133"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#b6">01133</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_u_d_p_transmit.html#b6">Send</a>(<font class="keyword">const</font> <font class="keywordtype">void</font> *buf, <font class="keywordtype">int</font> len)<font class="keyword"></font>
01134 <font class="keyword">                </font>{return ::send(so, (<font class="keyword">const</font> <font class="keywordtype">char</font> *)buf, len, 0);}
01135 
<a name="l01139"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#b7">01139</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_u_d_p_transmit.html#b7">endTransmitter</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01140 <font class="keyword">                </font>{Socket::endSocket();}
01141 
01142         <font class="comment">/*</font>
01143 <font class="comment">         * Get transmitter socket.</font>
01144 <font class="comment">         *</font>
01145 <font class="comment">         * @return transmitter.</font>
01146 <font class="comment">         */</font>
<a name="l01147"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#b8">01147</a>         <font class="keyword">inline</font> SOCKET <a class="code" href="classost_1_1_u_d_p_transmit.html#b8">getTransmitter</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01148 <font class="keyword">                </font>{<font class="keywordflow">return</font> so;};
01149 
<a name="l01150"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#b9">01150</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_u_d_p_transmit.html#b9">setMulticast</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01151 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::setMulticast(enable);};
01152 
<a name="l01153"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#b10">01153</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_u_d_p_transmit.html#b10">setTimeToLive</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> ttl)<font class="keyword"></font>
01154 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::setTimeToLive(ttl);};
01155 
01156 <font class="keyword">public</font>:
<a name="l01166"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#a0">01166</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_u_d_p_transmit.html#a0">Transmit</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *buffer, size_t len)<font class="keyword"></font>
01167 <font class="keyword">                </font>{return ::send(so, buffer, len, MSG_DONTWAIT);}
01168 
<a name="l01175"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#a1">01175</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_u_d_p_transmit.html#a1">isOutputReady</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> timeout = 0l)<font class="keyword"></font>
01176 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::isPending(SOCKET_PENDING_OUTPUT, timeout);};
01177 
01178 
<a name="l01179"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#a2">01179</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_u_d_p_transmit.html#a2">setRouting</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01180 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::setRouting(enable);};
01181 
<a name="l01182"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#a3">01182</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_u_d_p_transmit.html#a3">setTypeOfService</a>(socktos_t tos)<font class="keyword"></font>
01183 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::setTypeOfService(tos);};
01184 
<a name="l01185"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#a4">01185</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_u_d_p_transmit.html#a4">setBroadcast</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01186 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::setBroadcast(enable);};
01187 };
01188 
<a name="l01197"></a><a class="code" href="classost_1_1_u_d_p_receive.html">01197</a> <font class="keyword">class </font>UDPReceive : <font class="keyword">private</font> UDPSocket
01198 {
01199 <font class="keyword">protected</font>:
01211         <a class="code" href="classost_1_1_u_d_p_receive.html#b0">UDPReceive</a>(<font class="keyword">const</font> InetAddress &amp;bind, tpport_t port);
01212 
01221         sockerror_t <a class="code" href="classost_1_1_u_d_p_receive.html#b1">Connect</a>(<font class="keyword">const</font> InetHostAddress &amp;host, tpport_t port);
01222 
01227         sockerror_t <a class="code" href="classost_1_1_u_d_p_receive.html#b2">Disconnect</a>(<font class="keywordtype">void</font>);
01228 
<a name="l01235"></a><a class="code" href="classost_1_1_u_d_p_receive.html#b3">01235</a>         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_u_d_p_receive.html#b3">isPendingReceive</a>(timeout_t timeout)<font class="keyword"></font>
01236 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::isPending(SOCKET_PENDING_INPUT, timeout);};
01237 
<a name="l01241"></a><a class="code" href="classost_1_1_u_d_p_receive.html#b4">01241</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_u_d_p_receive.html#b4">endReceiver</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01242 <font class="keyword">                </font>{Socket::endSocket();}
01243 
<a name="l01244"></a><a class="code" href="classost_1_1_u_d_p_receive.html#b5">01244</a>         <font class="keyword">inline</font> SOCKET <a class="code" href="classost_1_1_u_d_p_receive.html#b5">getReceiver</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01245 <font class="keyword">                </font>{<font class="keywordflow">return</font> so;};
01246 
<a name="l01247"></a><a class="code" href="classost_1_1_u_d_p_receive.html#b6">01247</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_u_d_p_receive.html#b6">setRouting</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01248 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::setRouting(enable);};
01249 
<a name="l01250"></a><a class="code" href="classost_1_1_u_d_p_receive.html#b7">01250</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_u_d_p_receive.html#b7">setMulticast</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01251 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::setMulticast(enable);};
01252 
<a name="l01253"></a><a class="code" href="classost_1_1_u_d_p_receive.html#b8">01253</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_u_d_p_receive.html#b8">Join</a>(<font class="keyword">const</font> InetMcastAddress &amp;ia)<font class="keyword"></font>
01254 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::Join(ia);}
01255 
<a name="l01256"></a><a class="code" href="classost_1_1_u_d_p_receive.html#b9">01256</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_u_d_p_receive.html#b9">Drop</a>(<font class="keyword">const</font> InetMcastAddress &amp;ia)<font class="keyword"></font>
01257 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::Drop(ia);}
01258 
01259 <font class="keyword">public</font>:
<a name="l01267"></a><a class="code" href="classost_1_1_u_d_p_receive.html#a0">01267</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_u_d_p_receive.html#a0">Receive</a>(<font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
01268 <font class="keyword">                </font>{return ::recv(so, (<font class="keywordtype">char</font> *)buf, len, 0);};
01269 
<a name="l01276"></a><a class="code" href="classost_1_1_u_d_p_receive.html#a1">01276</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_u_d_p_receive.html#a1">isInputReady</a>(timeout_t timeout = TIMEOUT_INF)<font class="keyword"></font>
01277 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::isPending(SOCKET_PENDING_INPUT, timeout);};
01278 };
01279 
<a name="l01290"></a><a class="code" href="classost_1_1_u_d_p_duplex.html">01290</a> <font class="keyword">class </font>UDPDuplex : <font class="keyword">public</font> UDPTransmit, <font class="keyword">public</font> UDPReceive
01291 {
01292 <font class="keyword">public</font>:
01301         <a class="code" href="classost_1_1_u_d_p_duplex.html#a0">UDPDuplex</a>(<font class="keyword">const</font> InetAddress &amp;bind, tpport_t port);
01302 
01312         sockerror_t <a class="code" href="classost_1_1_u_d_p_duplex.html#a1">Connect</a>(<font class="keyword">const</font> InetHostAddress &amp;host, tpport_t port);
01313 
01320         sockerror_t <a class="code" href="classost_1_1_u_d_p_duplex.html#a2">Disconnect</a>(<font class="keywordtype">void</font>);
01321 };
01322 
01323 
<a name="l01348"></a><a class="code" href="classost_1_1_t_c_p_socket.html">01348</a> <font class="keyword">class </font>TCPSocket : <font class="keyword">protected</font> Socket
01349 {
01350 <font class="keyword">protected</font>:
<a name="l01362"></a><a class="code" href="classost_1_1_t_c_p_socket.html#b0">01362</a>         <font class="keyword">virtual</font> <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_t_c_p_socket.html#b0">OnAccept</a>(<font class="keyword">const</font> InetHostAddress &amp;ia, tpport_t port)<font class="keyword"></font>
01363 <font class="keyword">                </font>{<font class="keywordflow">return</font> <font class="keyword">true</font>;};
01364 
<a name="l01365"></a><a class="code" href="classost_1_1_t_c_p_socket.html#l0">01365</a>         <font class="keyword">friend</font> <font class="keyword">class </font>TCPStream;
<a name="l01366"></a><a class="code" href="classost_1_1_t_c_p_socket.html#l1">01366</a>         <font class="keyword">friend</font> <font class="keyword">class </font>SocketPort;
<a name="l01367"></a><a class="code" href="classost_1_1_t_c_p_socket.html#l2">01367</a>         <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classtcpstream.html">tcpstream</a>;
01368 
01369 <font class="keyword">public</font>:
01381         <a class="code" href="classost_1_1_t_c_p_socket.html#a0">TCPSocket</a>(<font class="keyword">const</font> InetAddress &amp;bind, tpport_t port, <font class="keywordtype">int</font> backlog = 5);
01382         
<a name="l01391"></a><a class="code" href="classost_1_1_t_c_p_socket.html#a1">01391</a>         <font class="keyword">inline</font> InetHostAddress <a class="code" href="classost_1_1_t_c_p_socket.html#a1">getRequest</a>(tpport_t *port = NULL)<font class="keyword"> const</font>
01392 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::getSender(port);};
01393 
01397         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_t_c_p_socket.html#a2">Reject</a>(<font class="keywordtype">void</font>);
01398 
<a name="l01402"></a><a class="code" href="classost_1_1_t_c_p_socket.html#a3">01402</a>         <font class="keyword">inline</font> InetHostAddress <a class="code" href="classost_1_1_t_c_p_socket.html#a3">getLocal</a>(tpport_t *port = NULL)<font class="keyword"> const</font>
01403 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::getLocal(port);};
01404 
<a name="l01408"></a><a class="code" href="classost_1_1_t_c_p_socket.html#a4">01408</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_t_c_p_socket.html#a4">isPendingConnection</a>(timeout_t timeout = TIMEOUT_INF) 
01409                 {<font class="keywordflow">return</font> Socket::isPending(SOCKET_PENDING_INPUT, timeout);}
01410 
<a name="l01414"></a><a class="code" href="classost_1_1_t_c_p_socket.html#a5">01414</a>         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_t_c_p_socket.html#a5">~TCPSocket</a>()<font class="keyword"></font>
01415 <font class="keyword">                </font>{<a class="code" href="classost_1_1_socket.html#b3">endSocket</a>();};
01416 };
01417 
01418 <font class="comment">/*</font>
01419 <font class="comment">:\projects\libraries\cplusplus\commonc++\win32\socket.h(357) : warning C4275: non dll-interface class 'streambuf' used as base for dll-interface class 'TCPStream'</font>
01420 <font class="comment">        c:\program files\microsoft visual studio\vc98\include\streamb.h(69) : see declaration of 'streambuf'</font>
01421 <font class="comment">c:\projects\libraries\cplusplus\commonc++\win32\socket.h(358) : warning C4275: non dll-interface class 'iostream' used as base for dll-interface class 'TCPStream'</font>
01422 <font class="comment">        c:\program files\microsoft visual studio\vc98\include\iostream.h(66) : see declaration of 'iostream'</font>
01423 <font class="comment">*/</font>
01424 
01425 <font class="preprocessor">#ifdef _MSC_VER</font>
01426 <font class="preprocessor"></font><font class="preprocessor">#pragma warning(disable:4275) // disable C4275 warning</font>
01427 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
01428 <font class="preprocessor"></font>
01442 <font class="preprocessor">#if defined(STLPORT) || defined(__KCC)</font>
01443 <font class="preprocessor"></font><font class="preprocessor">#define std::iostream std::iostream_withassign</font>
01444 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
01445 <font class="preprocessor"></font><font class="preprocessor">#ifdef  __KCC</font>
01446 <font class="preprocessor"></font><font class="keyword">using</font> <a class="code" href="classstd_1_1iostream.html">std::iostream</a>;
01447 <font class="preprocessor">#endif</font>
<a name="l01448"></a><a class="code" href="classost_1_1_t_c_p_stream.html">01448</a> <font class="preprocessor"></font><font class="keyword">class </font>TCPStream : <font class="keyword">public</font> Socket, <font class="keyword">public</font> std::streambuf, <font class="keyword">public</font> std::iostream
01449 {
01450 <font class="keyword">private</font>:
01451         <font class="keyword">inline</font> sockerror_t <a class="code" href="classost_1_1_socket.html#b5">setBroadcast</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01452 <font class="keyword">                </font>{<font class="keywordflow">return</font> Socket::setBroadcast(enable);};
01453 
01454         <font class="keyword">inline</font> InetHostAddress <a class="code" href="classost_1_1_socket.html#a2">getSender</a>(tpport_t *port)<font class="keyword"> const</font>
01455 <font class="keyword">                </font>{<font class="keywordflow">return</font> InetHostAddress();};
01456 
01457         <font class="keywordtype">int</font> doallocate();
01458 
01459         <font class="keyword">friend</font> TCPStream&amp; <a class="code" href="classost_1_1_t_c_p_stream.html#l0">crlf</a>(TCPStream&amp;);
01460         <font class="keyword">friend</font> TCPStream&amp; <a class="code" href="classost_1_1_t_c_p_stream.html#l1">lfcr</a>(TCPStream&amp;);
01461 
01462 <font class="keyword">protected</font>:
<a name="l01463"></a><a class="code" href="classost_1_1_t_c_p_stream.html#n0">01463</a>         timeout_t timeout;
<a name="l01464"></a><a class="code" href="classost_1_1_t_c_p_stream.html#n1">01464</a>         <font class="keywordtype">int</font> bufsize;
<a name="l01465"></a><a class="code" href="classost_1_1_t_c_p_stream.html#n3">01465</a>         <font class="keywordtype">char</font> *gbuf, *pbuf;
01466 
01471         <a class="code" href="classost_1_1_t_c_p_stream.html#b0">TCPStream</a>(<font class="keywordtype">bool</font> throwflag = <font class="keyword">true</font>);
01472 
01479         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_t_c_p_stream.html#b1">Allocate</a>(<font class="keywordtype">int</font> size);
01480 
01485         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_t_c_p_stream.html#b2">endStream</a>(<font class="keywordtype">void</font>);
01486 
01493         <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_t_c_p_stream.html#b3">underflow</a>(<font class="keywordtype">void</font>);
01494 
01503         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_t_c_p_stream.html#b4">uflow</a>(<font class="keywordtype">void</font>);
01504 
01512         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_t_c_p_stream.html#b5">overflow</a>(<font class="keywordtype">int</font> ch);
01513 
01522         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_t_c_p_stream.html#b6">Connect</a>(<font class="keyword">const</font> InetHostAddress &amp;host, tpport_t port, <font class="keywordtype">int</font> size);
01523 
<a name="l01531"></a><a class="code" href="classost_1_1_t_c_p_stream.html#b7">01531</a>         <a class="code" href="classstd_1_1iostream.html">std::iostream</a> *<a class="code" href="classost_1_1_t_c_p_stream.html#b7">tcp</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01532 <font class="keyword">                </font>{<font class="keywordflow">return</font> ((<a class="code" href="classstd_1_1iostream.html">std::iostream</a> *)<font class="keyword">this</font>);};
01533 
01534 <font class="keyword">public</font>:
01544         <a class="code" href="classost_1_1_t_c_p_stream.html#b0">TCPStream</a>(TCPSocket &amp;server, <font class="keywordtype">int</font> size = 512, <font class="keywordtype">bool</font> throwflag = <font class="keyword">true</font>, timeout_t timeout = 0);
01545 
01556         <a class="code" href="classost_1_1_t_c_p_stream.html#b0">TCPStream</a>(<font class="keyword">const</font> InetHostAddress &amp;host, tpport_t port, <font class="keywordtype">int</font> size = 512, <font class="keywordtype">bool</font> throwflag = <font class="keyword">true</font>, timeout_t to = 0);
01557 
<a name="l01563"></a><a class="code" href="classost_1_1_t_c_p_stream.html#a2">01563</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_t_c_p_stream.html#a2">setTimeout</a>(timeout_t to)<font class="keyword"></font>
01564 <font class="keyword">                </font>{timeout = to;};
01565 
01572         <a class="code" href="classost_1_1_t_c_p_stream.html#b0">TCPStream</a>(<font class="keyword">const</font> TCPStream &amp;source);
01573 
<a name="l01578"></a><a class="code" href="classost_1_1_t_c_p_stream.html#a4">01578</a>         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_t_c_p_stream.html#a4">~TCPStream</a>()<font class="keyword"></font>
01579 <font class="keyword">                </font>{<a class="code" href="classost_1_1_t_c_p_stream.html#b2">endStream</a>();};
01580 
01587         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_t_c_p_stream.html#a5">sync</a>(<font class="keywordtype">void</font>);
01588 
01596         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_t_c_p_stream.html#a6">isPending</a>(sockpend_t pend, timeout_t timeout = TIMEOUT_INF);
01597 
<a name="l01603"></a><a class="code" href="classost_1_1_t_c_p_stream.html#a7">01603</a>         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_t_c_p_stream.html#a7">getBufferSize</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
01604 <font class="keyword">                </font>{<font class="keywordflow">return</font> bufsize;};
01605 };
01606 
<a name="l01615"></a><a class="code" href="classost_1_1tcpstream.html">01615</a> <font class="keyword">class </font><a class="code" href="classtcpstream.html">tcpstream</a> : <font class="keyword">public</font> TCPStream
01616 {
01617 <font class="keyword">public</font>:
01621         <a class="code" href="classost_1_1tcpstream.html#a0">tcpstream</a>();
01622 
01630         <a class="code" href="classost_1_1tcpstream.html#a0">tcpstream</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *addr, <font class="keywordtype">int</font> buffer = 512);
01631 
01639         <a class="code" href="classost_1_1tcpstream.html#a0">tcpstream</a>(TCPSocket &amp;tcp, <font class="keywordtype">int</font> buffer = 512);
01640 
01648         <font class="keywordtype">void</font> <a class="code" href="classost_1_1tcpstream.html#a3">open</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *addr, <font class="keywordtype">int</font> buffer = 512);
01649 
01656         <font class="keywordtype">void</font> <a class="code" href="classost_1_1tcpstream.html#a3">open</a>(TCPSocket &amp;tcp, <font class="keywordtype">int</font> buffer = 512);
01657 
01661         <font class="keywordtype">void</font> <a class="code" href="classost_1_1tcpstream.html#a5">close</a>(<font class="keywordtype">void</font>);
01662 
01666         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1tcpstream.html#a6">operator!</a>() <font class="keyword">const</font>;
01667 };              
01668 
<a name="l01679"></a><a class="code" href="classost_1_1_t_c_p_session.html">01679</a> <font class="keyword">class </font>TCPSession : <font class="keyword">public</font> TCPStream, <font class="keyword">public</font> Thread
01680 {
01681 <font class="keyword">protected</font>:
01694         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_t_c_p_session.html#b0">WaitConnection</a>(timeout_t timeout = TIMEOUT_INF);
01695 
01702         CCXX_MEMBER(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_t_c_p_session.html#b1">Initial</a>(<font class="keywordtype">void</font>);
01703 
<a name="l01709"></a><a class="code" href="classost_1_1_t_c_p_session.html#b2">01709</a>         CCXX_MEMBER(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_t_c_p_session.html#b2">Final</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01710 <font class="keyword">                </font>{<font class="keyword">delete</font> <font class="keyword">this</font>;};
01711 <font class="keyword">public</font>:
01722         <a class="code" href="classost_1_1_t_c_p_session.html#a0">TCPSession</a>(<font class="keyword">const</font> InetHostAddress &amp;host, 
01723                    tpport_t port, <font class="keywordtype">int</font> size = 512, <font class="keywordtype">int</font> pri = 0, <font class="keywordtype">int</font> stack = 0);
01724 
01735         <a class="code" href="classost_1_1_t_c_p_session.html#a0">TCPSession</a>(TCPSocket &amp;server, <font class="keywordtype">int</font> size = 512, 
01736                    <font class="keywordtype">int</font> pri = 0, <font class="keywordtype">int</font> stack = 0);
01737 };
01738 
01739 <font class="keyword">extern</font> CCXX_EXPORT(<a class="code" href="classstd_1_1ostream.html">std::ostream</a>&amp;) <a class="code" href="namespaceost.html#a186">operator&lt;&lt;</a>(<a class="code" href="classstd_1_1ostream.html">std::ostream</a> &amp;os, <font class="keyword">const</font> InetAddress &amp;ia);
01740 
<a name="l01741"></a><a class="code" href="namespaceost.html#a216">01741</a> <font class="keyword">inline</font> <font class="keyword">struct </font>in_addr getaddress(const InetAddress &amp;ia)
01742         {<font class="keywordflow">return</font> ia.getAddress();}
01743 
01744 <font class="preprocessor">#if defined(WIN32)</font>
01745 <font class="preprocessor"></font>
01756 <font class="keyword">class </font>init_WSA
01757 {
01758 <font class="keyword">public</font>:
01759         init_WSA();
01760         ~init_WSA();
01761 };
01762 
01763 <font class="preprocessor">#else // !WIN32</font>
01764 <font class="preprocessor"></font>
01765 <font class="keyword">class </font>SocketService;
01766 
<a name="l01790"></a><a class="code" href="classost_1_1_socket_port.html">01790</a> <font class="keyword">class </font>SocketPort : <font class="keyword">public</font> Socket, <font class="keyword">public</font> TimerPort
01791 {
01792 <font class="keyword">private</font>:
01793         SocketPort *next, *prev;
01794         SocketService *service;
01795         <font class="keyword">struct </font>timeval porttimer;
01796 <font class="preprocessor">#ifdef CCXX_USE_POLL</font>
01797 <font class="preprocessor"></font>        <font class="keyword">struct </font>pollfd   * ufd;
01798 <font class="preprocessor">#endif</font>
01799 <font class="preprocessor"></font>        <font class="keywordtype">bool</font> detect_pending;
01800         <font class="keywordtype">bool</font> detect_output;
01801         <font class="keywordtype">bool</font> detect_disconnect;
01802         
<a name="l01803"></a><a class="code" href="classost_1_1_socket_port.html#l0">01803</a>         <font class="keyword">friend</font> <font class="keyword">class </font>SocketService;
01804 
01805 <font class="keyword">protected</font>:
01814         <a class="code" href="classost_1_1_socket_port.html#b0">SocketPort</a>(SocketService *svc, TCPSocket &amp;tcp);
01815 
01824         <a class="code" href="classost_1_1_socket_port.html#b0">SocketPort</a>(SocketService *svc, <font class="keyword">const</font> InetAddress &amp;ia, tpport_t port);
01825 
01831          <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_port.html#b2">Attach</a>( SocketService* svc );
01832 
01833 
01838         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_socket_port.html#b3">~SocketPort</a>();
01839 
01844         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_port.html#b4">setDetectPending</a>( <font class="keywordtype">bool</font> );
01845         
<a name="l01849"></a><a class="code" href="classost_1_1_socket_port.html#b5">01849</a>         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_socket_port.html#b5">getDetectPending</a>( <font class="keywordtype">void</font> )<font class="keyword"> const</font>
01850 <font class="keyword">                </font>{ <font class="keywordflow">return</font> detect_pending; }
01851         
01856         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_port.html#b6">setDetectOutput</a>( <font class="keywordtype">bool</font> );
01857         
<a name="l01861"></a><a class="code" href="classost_1_1_socket_port.html#b7">01861</a>         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_socket_port.html#b7">getDetectOutput</a>( <font class="keywordtype">void</font> )<font class="keyword"> const</font>
01862 <font class="keyword">                </font>{ <font class="keywordflow">return</font> detect_output; }
01863 
<a name="l01868"></a><a class="code" href="classost_1_1_socket_port.html#b8">01868</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_port.html#b8">Expired</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01869 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01870 
<a name="l01875"></a><a class="code" href="classost_1_1_socket_port.html#b9">01875</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_port.html#b9">Pending</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01876 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01877 
<a name="l01882"></a><a class="code" href="classost_1_1_socket_port.html#b10">01882</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_port.html#b10">Output</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01883 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01884 
<a name="l01889"></a><a class="code" href="classost_1_1_socket_port.html#b11">01889</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_port.html#b11">Disconnect</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01890 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01891 
01902         sockerror_t <a class="code" href="classost_1_1_socket_port.html#b12">Connect</a>(<font class="keyword">const</font> InetAddress &amp;ia, tpport_t port);
01903 
<a name="l01913"></a><a class="code" href="classost_1_1_socket_port.html#b13">01913</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_socket_port.html#b13">Send</a>(<font class="keyword">const</font> <font class="keywordtype">void</font> *buf, <font class="keywordtype">int</font> len)<font class="keyword"></font>
01914 <font class="keyword">                </font>{return ::send(so, (<font class="keyword">const</font> <font class="keywordtype">char</font> *)buf, len, 0);};
01915 
<a name="l01924"></a><a class="code" href="classost_1_1_socket_port.html#b14">01924</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_socket_port.html#b14">Recv</a>(<font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
01925 <font class="keyword">                </font>{return ::recv(so, (<font class="keywordtype">char</font> *)buf, len, 0);};
01926 
<a name="l01935"></a><a class="code" href="classost_1_1_socket_port.html#b15">01935</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_socket_port.html#b15">Peek</a>(<font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
01936 <font class="keyword">                </font>{return ::recv(so, (<font class="keywordtype">char</font> *)buf, len, MSG_PEEK);};
01937 
01938 <font class="keyword">public</font>:
01946         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_port.html#a0">setTimer</a>(timeout_t timeout = 0);
01947 
01955         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_port.html#a1">incTimer</a>(timeout_t timeout);
01956 };
01957 
<a name="l01970"></a><a class="code" href="classost_1_1_socket_service.html">01970</a> <font class="keyword">class </font>SocketService : <font class="keyword">public</font> Thread, <font class="keyword">private</font> Mutex
01971 {
01972 <font class="keyword">private</font>:
01973         fd_set connect;
01974         <font class="keywordtype">int</font> iosync[2];
01975         <font class="keywordtype">int</font> hiwater;
01976         <font class="keywordtype">int</font> count;
01977         SocketPort *first, *last;
01978 
01984         <font class="keywordtype">void</font> Attach(SocketPort *port);
01990         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread.html#a5">Detach</a>(SocketPort *port);
01991         
01995         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread.html#b0">Run</a>(<font class="keywordtype">void</font>);
01996 
<a name="l01997"></a><a class="code" href="classost_1_1_socket_service.html#l0">01997</a>         <font class="keyword">friend</font> <font class="keyword">class </font>SocketPort;
01998 
01999 <font class="keyword">protected</font>:
<a name="l02005"></a><a class="code" href="classost_1_1_socket_service.html#b0">02005</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_service.html#b0">OnUpdate</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> buf)<font class="keyword"></font>
02006 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
02007 
<a name="l02013"></a><a class="code" href="classost_1_1_socket_service.html#b1">02013</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_service.html#b1">OnEvent</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
02014 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
02015 
<a name="l02023"></a><a class="code" href="classost_1_1_socket_service.html#b2">02023</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_service.html#b2">OnCallback</a>(SocketPort *port)<font class="keyword"></font>
02024 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
02025 
02026 <font class="keyword">public</font>:
02037         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_socket_service.html#a0">Update</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> flag = 0xff);
02038 
02045         <a class="code" href="classost_1_1_socket_service.html#a1">SocketService</a>(<font class="keywordtype">int</font> pri = 0);
02046 
02051         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_socket_service.html#a2">~SocketService</a>();
02052 
<a name="l02059"></a><a class="code" href="classost_1_1_socket_service.html#a3">02059</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_socket_service.html#a3">getCount</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
02060 <font class="keyword">                </font>{<font class="keywordflow">return</font> count;};
02061 };
02062 
02063 <font class="preprocessor">#endif // !WIN32</font>
02064 <font class="preprocessor"></font>
02065 <font class="preprocessor">#ifdef  COMMON_STD_EXCEPTION</font>
02066 <font class="preprocessor"></font><font class="keyword">class </font>SockException : <font class="keyword">public</font> IOException
02067 {
02068 <font class="keyword">public</font>:
02069         SockException(std::string str) : IOException(str) {};
02070 };
02071 <font class="preprocessor">#endif</font>
02072 <font class="preprocessor"></font>
02073 <font class="preprocessor">#ifdef  CCXX_NAMESPACES</font>
02074 <font class="preprocessor"></font>};
02075 <font class="preprocessor">#endif</font>
02076 <font class="preprocessor"></font>
02077 <font class="preprocessor">#endif</font>
02078 <font class="preprocessor"></font>
</pre></div><hr><address><small>Generated at Fri Jan 4 18:51:46 2002 for CommonC++ by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.10 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
 &copy;&nbsp;1997-2001</small></address>
</body>
</html>