Sophie

Sophie

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

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta name="robots" content="noindex">
<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.5 on Thu Oct 4 15:32:58 2001 -->
<center>
<a class="qindex" href="index.html">Main Page</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="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_h.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">#include "<a class="code" href="config_h.html">config.h</a>"</font>
00045 
00046 <font class="preprocessor">#if defined(WIN32)</font>
00047 <font class="preprocessor"></font><font class="preprocessor"># ifndef __CCXX_THREAD_H__</font>
00048 <font class="preprocessor"></font><font class="preprocessor">#  include &lt;<a class="code" href="thread_h.html">thread.h</a>&gt;</font>
00049 <font class="preprocessor"># endif</font>
00050 <font class="preprocessor"></font><font class="preprocessor"># include &lt;winsock.h&gt;</font>
00051 <font class="preprocessor"># define TIMEOUT_INF ~((timeout_t) 0)</font>
<a name="l00052"></a><a class="code" href="socket_h.html#a0">00052</a> <font class="preprocessor"></font>  <font class="keyword">typedef</font> <font class="keywordtype">int</font> socklen_t;
00053 <font class="preprocessor">#else</font>
00054 <font class="preprocessor"></font><font class="preprocessor"># ifndef __CCXX_THREAD_H__</font>
00055 <font class="preprocessor"></font><font class="preprocessor">#  include &lt;cc++/<a class="code" href="thread_h.html">thread.h</a>&gt;</font>
00056 <font class="preprocessor"># elif defined(__CCXX_NAMESPACE_H__)</font>
00057 <font class="preprocessor"></font><font class="preprocessor">#  include &lt;cc++/<a class="code" href="macros_h.html">macros.h</a>&gt;</font>
00058 <font class="preprocessor"># endif</font>
00059 <font class="preprocessor"></font><font class="preprocessor"># define INVALID_SOCKET -1</font>
00060 <font class="preprocessor"></font><font class="preprocessor"># ifdef __EXPORT</font>
00061 <font class="preprocessor"></font><font class="preprocessor">#  undef __EXPORT</font>
00062 <font class="preprocessor"></font><font class="preprocessor"># endif</font>
00063 <font class="preprocessor"></font><font class="preprocessor"># define __EXPORT</font>
<a name="l00064"></a><a class="code" href="socket_h.html#a1">00064</a> <font class="preprocessor"></font>  <font class="keyword">typedef</font> <font class="keywordtype">int</font> SOCKET;
00065 <font class="preprocessor">#endif</font>
00066 <font class="preprocessor"></font>
00067 <font class="preprocessor">#include &lt;iostream&gt;</font>
00068 
00069 <font class="preprocessor">#ifndef MSG_DONTWAIT</font>
00070 <font class="preprocessor"></font><font class="preprocessor">#define MSG_DONTWAIT    0</font>
00071 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00072 <font class="preprocessor"></font>
<a name="l00077"></a><a class="code" href="socket_h.html#a59">00077</a> <font class="keyword">typedef</font> <font class="keyword">enum</font>
00078 {
00079         SOCKET_INITIAL,
00080         SOCKET_AVAILABLE,
00081         SOCKET_BOUND,
00082         SOCKET_CONNECTED,
00083         SOCKET_CONNECTING,
00084         SOCKET_STREAM
00085 } sockstate_t;
00086 
<a name="l00087"></a><a class="code" href="socket_h.html#a60">00087</a> <font class="keyword">typedef</font> <font class="keyword">enum</font>
00088 {
00089         SOCKET_SUCCESS = 0,
00090         SOCKET_CREATE_FAILED,
00091         SOCKET_COPY_FAILED,
00092         SOCKET_INPUT_ERROR,
00093         SOCKET_INPUT_INTERRUPT,
00094         SOCKET_RESOURCE_FAILURE,
00095         SOCKET_OUTPUT_ERROR,
00096         SOCKET_OUTPUT_INTERRUPT,
00097         SOCKET_NOT_CONNECTED,
00098         SOCKET_CONNECT_REFUSED,
00099         SOCKET_CONNECT_REJECTED,
00100         SOCKET_CONNECT_TIMEOUT,
00101         SOCKET_CONNECT_FAILED,
00102         SOCKET_CONNECT_INVALID,
00103         SOCKET_CONNECT_BUSY,
00104         SOCKET_CONNECT_NOROUTE,
00105         SOCKET_BINDING_FAILED,
00106         SOCKET_BROADCAST_DENIED,
00107         SOCKET_ROUTING_DENIED,
00108         SOCKET_KEEPALIVE_DENIED,
00109         SOCKET_SERVICE_DENIED,
00110         SOCKET_SERVICE_UNAVAILABLE,
00111         SOCKET_MULTICAST_DISABLED,
00112         SOCKET_TIMEOUT_ERROR,
00113         SOCKET_NODELAY_ERROR,
00114         SOCKET_EXTENDED_ERROR
00115 } sockerror_t;
00116 
<a name="l00117"></a><a class="code" href="socket_h.html#a61">00117</a> <font class="keyword">typedef</font> <font class="keyword">enum</font>
00118 {
00119         SOCKET_IPTOS_LOWDELAY,
00120         SOCKET_IPTOS_THROUGHPUT,
00121         SOCKET_IPTOS_RELIABILITY,
00122         SOCKET_IPTOS_MINCOST,
00123         SOCKET_IPTOS_INVALID
00124 } socktos_t;
00125 
<a name="l00126"></a><a class="code" href="socket_h.html#a62">00126</a> <font class="keyword">typedef</font> <font class="keyword">enum</font>
00127 {
00128         SOCKET_PENDING_INPUT,
00129         SOCKET_PENDING_OUTPUT,
00130         SOCKET_PENDING_ERROR
00131 } sockpend_t;
00132 
<a name="l00136"></a><a class="code" href="socket_h.html#a2">00136</a> <font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> tpport_t;
00137 
<a name="l00138"></a><a class="code" href="socket_h.html#a3">00138</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_inetaddress.html">InetAddress</a>;
<a name="l00139"></a><a class="code" href="socket_h.html#a4">00139</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_inethostaddress.html">InetHostAddress</a>;
<a name="l00140"></a><a class="code" href="socket_h.html#a5">00140</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_inetmaskaddress.html">InetMaskAddress</a>;
<a name="l00141"></a><a class="code" href="socket_h.html#a6">00141</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_broadcastaddress.html">BroadcastAddress</a>;
<a name="l00142"></a><a class="code" href="socket_h.html#a7">00142</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_socket.html">Socket</a>;
<a name="l00143"></a><a class="code" href="socket_h.html#a8">00143</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_udpsocket.html">UDPSocket</a>;
<a name="l00144"></a><a class="code" href="socket_h.html#a9">00144</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_udpbroadcast.html">UDPBroadcast</a>;
<a name="l00145"></a><a class="code" href="socket_h.html#a10">00145</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_udptransmit.html">UDPTransmit</a>;
<a name="l00146"></a><a class="code" href="socket_h.html#a11">00146</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_udpreceive.html">UDPReceive</a>;
<a name="l00147"></a><a class="code" href="socket_h.html#a12">00147</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_udpduplex.html">UDPDuplex</a>;
<a name="l00148"></a><a class="code" href="socket_h.html#a13">00148</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_tcpsocket.html">TCPSocket</a>;
<a name="l00149"></a><a class="code" href="socket_h.html#a14">00149</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_tcpstream.html">TCPStream</a>;
<a name="l00150"></a><a class="code" href="socket_h.html#a15">00150</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_tcpstream.html">tcpstream</a>;
<a name="l00151"></a><a class="code" href="socket_h.html#a16">00151</a> <font class="keyword">class </font>__EXPORT <a class="code" href="class_tcpsession.html">TCPSession</a>;
00152 
<a name="l00161"></a><a class="code" href="class_inetaddrvalidator.html">00161</a> <font class="keyword">class </font><a class="code" href="class_inetaddrvalidator.html">InetAddrValidator</a> 
00162 {
00163 <font class="keyword">public</font>:
<a name="l00167"></a><a class="code" href="class_inetaddrvalidator.html#a0">00167</a>         <a class="code" href="class_inetaddrvalidator.html#a0">InetAddrValidator</a>()<font class="keyword"> </font>{ };
00168 
00173         <font class="keyword">inline</font> <font class="keyword">virtual</font> <font class="keywordtype">void</font> 
00174         <a class="code" href="class_inetaddrvalidator.html#a1">operator()</a>(<font class="keyword">const</font> in_addr address) <font class="keyword">const</font> = 0;
00175 };
00176 
<a name="l00185"></a><a class="code" href="class_inetmcastaddrvalidator.html">00185</a> <font class="keyword">class </font><a class="code" href="class_inetmcastaddrvalidator.html">InetMcastAddrValidator</a>: <font class="keyword">public</font> <a class="code" href="class_inetaddrvalidator.html">InetAddrValidator</a>
00186 {
00187 <font class="keyword">public</font>:
<a name="l00191"></a><a class="code" href="class_inetmcastaddrvalidator.html#a0">00191</a>         <a class="code" href="class_inetmcastaddrvalidator.html#a0">InetMcastAddrValidator</a>()<font class="keyword"></font>{};
00192 
00197         <font class="keyword">inline</font> <font class="keywordtype">void</font> 
00198         <a class="code" href="class_inetaddrvalidator.html#a1">operator()</a>(<font class="keyword">const</font> in_addr address) <font class="keyword">const</font>; 
00199 <font class="keyword">private</font>:
00200 <font class="preprocessor">#if __BYTE_ORDER == __BIG_ENDIAN</font>
00201 <font class="preprocessor"></font>        <font class="keyword">enum</font>
00202         {
00203                 MCAST_VALID_MASK = 0xF0000000,
00204                 MCAST_VALID_VALUE = 0xE0000000
00205         };
00206 <font class="preprocessor">#else</font>
00207 <font class="preprocessor"></font>        <font class="keyword">enum</font>
00208         {
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="class_inetaddress.html">00229</a> <font class="keyword">class </font><a class="code" href="class_inetaddress.html">InetAddress</a>
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> <a class="code" href="class_inetaddrvalidator.html">InetAddrValidator</a> *validator;
00238 
00239 <font class="keyword">protected</font>:
<a name="l00240"></a><a class="code" href="class_inetaddress.html#n0">00240</a>         <font class="keyword">struct </font>in_addr * ipaddr;
<a name="l00241"></a><a class="code" href="class_inetaddress.html#n1">00241</a>         size_t addr_count;
00242 <font class="preprocessor">#if defined(WIN32)</font>
<a name="l00243"></a><a class="code" href="class_inetaddress.html#q0">00243</a> <font class="preprocessor"></font>        <font class="keyword">static</font> <a class="code" href="class_mutexcounter.html">MutexCounter</a> counter;
00244 <font class="preprocessor">#else</font>
<a name="l00245"></a><a class="code" href="class_inetaddress.html#q1">00245</a> <font class="preprocessor"></font>        <font class="keyword">static</font> <a class="code" href="class_mutex.html">Mutex</a> mutex;
00246 <font class="preprocessor">#endif</font>
00247 <font class="preprocessor"></font>
00254         <font class="keywordtype">bool</font> <a class="code" href="class_inetaddress.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="class_inetaddress.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="socket_h.html#a3">InetAddress</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddrvalidator.html">InetAddrValidator</a> *validator = NULL);
00273 
00282         <a class="code" href="socket_h.html#a3">InetAddress</a>(<font class="keyword">struct</font> in_addr addr, <font class="keyword">const</font> <a class="code" href="class_inetaddrvalidator.html">InetAddrValidator</a> *validator = NULL);
00283 
00294         <a class="code" href="socket_h.html#a3">InetAddress</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *address, <font class="keyword">const</font> <a class="code" href="class_inetaddrvalidator.html">InetAddrValidator</a> *validator = NULL);
00295 
00299         <a class="code" href="socket_h.html#a3">InetAddress</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;rhs);
00300 
00304         <font class="keyword">virtual</font> <a class="code" href="class_inetaddress.html#a4">~InetAddress</a>();
00305 
00312         <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="class_inetaddress.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="class_inetaddress.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="class_inetaddress.html#a9">00350</a>         size_t <a class="code" href="class_inetaddress.html#a9">getAddressCount</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> addr_count; }
00351 
00352         <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;<a class="code" href="class_inetaddress.html#a10">operator=</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *str);
00353         <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;<a class="code" href="class_inetaddress.html#a10">operator=</a>(<font class="keyword">struct</font> in_addr addr);
00354         <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;<a class="code" href="class_inetaddress.html#a10">operator=</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;rhs);
00355 
00360         <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;<a class="code" href="class_inetaddress.html#a10">operator=</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> addr);
00361 
<a name="l00362"></a><a class="code" href="class_inetaddress.html#a14">00362</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="class_inetaddress.html#a14">operator!</a>()<font class="keyword"> const</font>
00363 <font class="keyword">                </font>{<font class="keywordflow">return</font> !<a class="code" href="class_inetaddress.html#a6">isInetAddress</a>();};
00364 
00373         <font class="keywordtype">bool</font> <a class="code" href="class_inetaddress.html#a15">operator==</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;a) <font class="keyword">const</font>;
00374 
00382         <font class="keywordtype">bool</font> <a class="code" href="class_inetaddress.html#a16">operator!=</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;a) <font class="keyword">const</font>;
00383 };      
00384 
<a name="l00397"></a><a class="code" href="class_inetmaskaddress.html">00397</a> <font class="keyword">class </font><a class="code" href="class_inetmaskaddress.html">InetMaskAddress</a> : <font class="keyword">public</font> <a class="code" href="class_inetaddress.html">InetAddress</a>
00398 {
00399 <font class="keyword">public</font>:
00406         <a class="code" href="socket_h.html#a5">InetMaskAddress</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *mask);
00407 
00418         <font class="keyword">friend</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> <a class="code" href="class_inetmaskaddress.html#l0">operator&amp;</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &amp;addr, 
00419                                          <font class="keyword">const</font> <a class="code" href="class_inetmaskaddress.html">InetMaskAddress</a> &amp;mask);
00420 
<a name="l00425"></a><a class="code" href="class_inetmaskaddress.html#a1">00425</a>         <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;<a class="code" href="class_inetaddress.html#a10">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> <a class="code" href="class_inetaddress.html#a10">InetAddress::operator =</a>(addr); }
00427 };
00428 
<a name="l00436"></a><a class="code" href="class_inethostaddress.html">00436</a> <font class="keyword">class </font><a class="code" href="class_inethostaddress.html">InetHostAddress</a> : <font class="keyword">public</font> <a class="code" href="class_inetaddress.html">InetAddress</a>
00437 {
00438 <font class="keyword">public</font>: 
00451         <a class="code" href="socket_h.html#a4">InetHostAddress</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *host = NULL);
00452 
00460         <a class="code" href="socket_h.html#a4">InetHostAddress</a>(<font class="keyword">struct</font> in_addr addr);
00461 
<a name="l00466"></a><a class="code" href="class_inethostaddress.html#a2">00466</a>         <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;<a class="code" href="class_inetaddress.html#a10">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> <a class="code" href="class_inetaddress.html#a10">InetAddress::operator =</a>(addr); }
00468 
00473         <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &amp;<a class="code" href="class_inethostaddress.html#a3">operator&amp;=</a>(<font class="keyword">const</font> <a class="code" href="class_inetmaskaddress.html">InetMaskAddress</a> &amp;mask);
00474 
<a name="l00475"></a><a class="code" href="class_inethostaddress.html#l0">00475</a>         <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="class_inetmaskaddress.html">InetMaskAddress</a>;
00476         <font class="keyword">friend</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> <a class="code" href="class_inethostaddress.html#l1">operator&amp;</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &amp;addr, 
00477                                          <font class="keyword">const</font> <a class="code" href="class_inetmaskaddress.html">InetMaskAddress</a> &amp;mask);
00478 };
00479 
<a name="l00484"></a><a class="code" href="class_broadcastaddress.html">00484</a> <font class="keyword">class </font><a class="code" href="class_broadcastaddress.html">BroadcastAddress</a> : <font class="keyword">public</font> <a class="code" href="class_inetaddress.html">InetAddress</a>
00485 {
00486 <font class="keyword">public</font>:
00494         <a class="code" href="socket_h.html#a6">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="class_inetmcastaddress.html">00506</a> <font class="keyword">class </font><a class="code" href="class_inetmcastaddress.html">InetMcastAddress</a>: <font class="keyword">public</font> <a class="code" href="class_inetaddress.html">InetAddress</a>
00507 {
00508 <font class="keyword">public</font>:
00513         <a class="code" href="class_inetmcastaddress.html#a0">InetMcastAddress</a>();
00514 
00521         <a class="code" href="class_inetmcastaddress.html#a0">InetMcastAddress</a>(<font class="keyword">const</font> <font class="keyword">struct</font> in_addr address);
00522 
00532         <a class="code" href="class_inetmcastaddress.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> <a class="code" href="class_inetmcastaddrvalidator.html">InetMcastAddrValidator</a> validator;
00543 };
00544 
<a name="l00562"></a><a class="code" href="class_socket.html">00562</a> <font class="keyword">class </font><a class="code" href="class_socket.html">Socket</a>
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="class_socket.html#n0">00574</a>                 <font class="keywordtype">bool</font> thrown: 1;
<a name="l00575"></a><a class="code" href="class_socket.html#n1">00575</a>                 <font class="keywordtype">bool</font> broadcast: 1;
<a name="l00576"></a><a class="code" href="class_socket.html#n2">00576</a>                 <font class="keywordtype">bool</font> route: 1;
<a name="l00577"></a><a class="code" href="class_socket.html#n3">00577</a>                 <font class="keywordtype">bool</font> keepalive: 1;
<a name="l00578"></a><a class="code" href="class_socket.html#n4">00578</a>                 <font class="keywordtype">bool</font> loopback: 1;
<a name="l00579"></a><a class="code" href="class_socket.html#n5">00579</a>                 <font class="keywordtype">bool</font> multicast: 1;
<a name="l00580"></a><a class="code" href="class_socket.html#n6">00580</a>                 <font class="keywordtype">bool</font> completion: 1;
<a name="l00581"></a><a class="code" href="class_socket.html#n7">00581</a>                 <font class="keywordtype">bool</font> linger: 1;
<a name="l00582"></a><a class="code" href="class_socket.html#n8">00582</a>                 <font class="keywordtype">unsigned</font> ttl: 8;
00583         } flags;
00584 
<a name="l00590"></a><a class="code" href="class_socket.html#n10">00590</a>         SOCKET so;
<a name="l00591"></a><a class="code" href="class_socket.html#n11">00591</a>         sockstate_t state;
00592 
00600         sockerror_t <a class="code" href="class_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="class_socket.html#b1">00608</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_socket.html#b0">Error</a>(<font class="keywordtype">char</font> *estr)<font class="keyword"></font>
00609 <font class="keyword">                </font>{<a class="code" href="class_socket.html#b0">Error</a>(SOCKET_EXTENDED_ERROR, estr);};
00610         
<a name="l00617"></a><a class="code" href="class_socket.html#b2">00617</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_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="class_socket.html#b3">endSocket</a>(<font class="keywordtype">void</font>);
00626 
00632         sockerror_t <a class="code" href="class_socket.html#b4">connectError</a>(<font class="keywordtype">void</font>);
00633 
00642         sockerror_t <a class="code" href="class_socket.html#b5">setBroadcast</a>(<font class="keywordtype">bool</font> enable);
00643 
00654         sockerror_t <a class="code" href="class_socket.html#b6">setMulticast</a>(<font class="keywordtype">bool</font> enable);
00655 
00663         sockerror_t <a class="code" href="class_socket.html#b7">setLoopback</a>(<font class="keywordtype">bool</font> enable);
00664 
00671         sockerror_t <a class="code" href="class_socket.html#b8">setTimeToLive</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> ttl);
00672 
00679         sockerror_t <a class="code" href="class_socket.html#b9">Join</a>(<font class="keyword">const</font> <a class="code" href="class_inetmcastaddress.html">InetMcastAddress</a> &amp;ia);
00680 
00687         sockerror_t <a class="code" href="class_socket.html#b10">Drop</a>(<font class="keyword">const</font> <a class="code" href="class_inetmcastaddress.html">InetMcastAddress</a> &amp;ia);
00688 
00696         sockerror_t <a class="code" href="class_socket.html#b11">setRouting</a>(<font class="keywordtype">bool</font> enable);
00697 
00698 
00705         sockerror_t <a class="code" href="class_socket.html#b12">setNoDelay</a>(<font class="keywordtype">bool</font> enable);
00706 
00718         <a class="code" href="socket_h.html#a7">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="socket_h.html#a7">Socket</a>(SOCKET fd);
00728 
00736         <a class="code" href="socket_h.html#a7">Socket</a>(<font class="keyword">const</font> <a class="code" href="class_socket.html">Socket</a> &amp;source);
00737 
00747         ssize_t <a class="code" href="class_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>:
<a name="l00757"></a><a class="code" href="class_socket.html#a0">00757</a>         <font class="keyword">virtual</font> <a class="code" href="class_socket.html#a0">~Socket</a>()<font class="keyword"></font>
00758 <font class="keyword">                </font>{<a class="code" href="class_socket.html#b3">endSocket</a>();};
00759 
00763         <a class="code" href="class_socket.html">Socket</a> &amp;<a class="code" href="class_inetaddress.html#a10">operator=</a>(<font class="keyword">const</font> <a class="code" href="class_socket.html">Socket</a> &amp;from);
00764 
00774         <a class="code" href="class_inethostaddress.html">InetHostAddress</a> <a class="code" href="class_socket.html#a2">getSender</a>(tpport_t *port = NULL) <font class="keyword">const</font>;
00775 
00785         <a class="code" href="class_inethostaddress.html">InetHostAddress</a> <a class="code" href="class_socket.html#a3">getPeer</a>(tpport_t *port = NULL) <font class="keyword">const</font>;
00786 
00794         <a class="code" href="class_inethostaddress.html">InetHostAddress</a> <a class="code" href="class_socket.html#a4">getLocal</a>(tpport_t *port = NULL) <font class="keyword">const</font>;
00795         
00806         <font class="keywordtype">void</font> <a class="code" href="class_socket.html#a5">setCompletion</a>(<font class="keywordtype">bool</font> immediate);
00807 
00813         sockerror_t <a class="code" href="class_socket.html#a6">setLinger</a>(<font class="keywordtype">bool</font> linger);
00814 
00822         sockerror_t <a class="code" href="class_socket.html#a7">setKeepAlive</a>(<font class="keywordtype">bool</font> enable);
00823 
00832         sockerror_t <a class="code" href="class_socket.html#a8">setTypeOfService</a>(socktos_t service);
00833 
00842         <font class="keywordtype">bool</font> <a class="code" href="class_socket.html#a9">isConnected</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>;
00843 
00851         <font class="keywordtype">bool</font> <a class="code" href="class_socket.html#a10">isActive</a>(<font class="keywordtype">void</font>) <font class="keyword">const</font>;
00852 
00857         <font class="keywordtype">bool</font> <a class="code" href="class_inetaddress.html#a14">operator!</a>() <font class="keyword">const</font>;
00858 
<a name="l00865"></a><a class="code" href="class_socket.html#a12">00865</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="class_socket.html#a12">isBroadcast</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00866 <font class="keyword">                </font>{<font class="keywordflow">return</font> flags.broadcast;};
00867 
<a name="l00873"></a><a class="code" href="class_socket.html#a13">00873</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="class_socket.html#a13">isRouted</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00874 <font class="keyword">                </font>{<font class="keywordflow">return</font> flags.route;};
00875 
<a name="l00882"></a><a class="code" href="class_socket.html#a14">00882</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="class_socket.html#a14">getErrorNumber</a>(<font class="keywordtype">void</font>)<font class="keyword"> const </font>{<font class="keywordflow">return</font> errid;}
00883         
<a name="l00890"></a><a class="code" href="class_socket.html#a15">00890</a>         <font class="keyword">inline</font> <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="class_socket.html#a15">getErrorString</a>(<font class="keywordtype">void</font>)<font class="keyword"> const </font>{<font class="keywordflow">return</font> errstr;}
00891 
00901         <font class="keyword">virtual</font> <font class="keywordtype">bool</font> <a class="code" href="class_socket.html#a16">isPending</a>(sockpend_t pend, timeout_t timeout = TIMEOUT_INF);
00902 };
00903 
<a name="l00936"></a><a class="code" href="class_udpsocket.html">00936</a> <font class="keyword">class </font><a class="code" href="class_udpsocket.html">UDPSocket</a> : <font class="keyword">public</font> <a class="code" href="class_socket.html">Socket</a>
00937 {
00938 <font class="keyword">private</font>:
00939         <font class="keyword">inline</font> sockerror_t <a class="code" href="class_socket.html#a7">setKeepAlive</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
00940 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#a7">Socket::setKeepAlive</a>(enable);};
00941 
00942 <font class="keyword">protected</font>:
<a name="l00943"></a><a class="code" href="class_udpsocket.html#n0">00943</a>         <font class="keyword">struct </font>sockaddr_in peer;
00944 
00945 <font class="keyword">public</font>:
00949         <a class="code" href="socket_h.html#a8">UDPSocket</a>(<font class="keywordtype">void</font>);
00950 
00960         <a class="code" href="socket_h.html#a8">UDPSocket</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;bind, tpport_t port);
00961 
<a name="l00965"></a><a class="code" href="class_udpsocket.html#a2">00965</a>         <a class="code" href="class_udpsocket.html#a2">~UDPSocket</a>()<font class="keyword"></font>
00966 <font class="keyword">                </font>{<a class="code" href="class_socket.html#b3">endSocket</a>();};
00967 
00975         <font class="keywordtype">void</font> <a class="code" href="class_udpsocket.html#a3">setPeer</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &amp;host, tpport_t port);
00976 
<a name="l00984"></a><a class="code" href="class_udpsocket.html#a4">00984</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_udpsocket.html#a4">Send</a>(<font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
00985 <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));};
00986 
<a name="l00994"></a><a class="code" href="class_udpsocket.html#a5">00994</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_udpsocket.html#a5">Recv</a>(<font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
00995 <font class="keyword">                </font>{return ::recv(so, (<font class="keywordtype">char</font> *)buf, len, 0);};
00996 
01005         <a class="code" href="class_inethostaddress.html">InetHostAddress</a> <a class="code" href="class_socket.html#a3">getPeer</a>(tpport_t *port = NULL) <font class="keyword">const</font>;
01006 
<a name="l01014"></a><a class="code" href="class_udpsocket.html#a7">01014</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_udpsocket.html#a7">Peek</a>(<font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
01015 <font class="keyword">                </font>{return ::recv(so, (<font class="keywordtype">char</font> *)buf, len, MSG_PEEK);};
01016 };
01017 
01018 
<a name="l01027"></a><a class="code" href="class_udpbroadcast.html">01027</a> <font class="keyword">class </font><a class="code" href="class_udpbroadcast.html">UDPBroadcast</a> : <font class="keyword">public</font> <a class="code" href="class_udpsocket.html">UDPSocket</a>
01028 {
01029 <font class="keyword">private</font>:
01030         <font class="keywordtype">void</font> <a class="code" href="class_udpsocket.html#a3">setPeer</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &amp;ia, tpport_t port)<font class="keyword"> </font>{};
01031 
01032         sockerror_t <a class="code" href="class_socket.html#b5">setBroadcast</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01033 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#b5">Socket::setBroadcast</a>(enable);};
01034 
01035 <font class="keyword">public</font>:
01042         <a class="code" href="socket_h.html#a9">UDPBroadcast</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;ia, tpport_t port);
01043 
01050         <font class="keywordtype">void</font> <a class="code" href="class_udpsocket.html#a3">setPeer</a>(<font class="keyword">const</font> <a class="code" href="class_broadcastaddress.html">BroadcastAddress</a> &amp;subnet, tpport_t port);
01051 };      
01052 
<a name="l01061"></a><a class="code" href="class_udptransmit.html">01061</a> <font class="keyword">class </font><a class="code" href="class_udptransmit.html">UDPTransmit</a> : <font class="keyword">private</font> <a class="code" href="class_udpsocket.html">UDPSocket</a>
01062 {
01063 <font class="keyword">protected</font>:
01067         <a class="code" href="socket_h.html#a10">UDPTransmit</a>();
01068 
01081         <a class="code" href="socket_h.html#a10">UDPTransmit</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;bind, tpport_t port = 5005);
01082 
01091         sockerror_t <a class="code" href="class_udptransmit.html#b2">Connect</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &amp;host, tpport_t port);
01092 
01101         sockerror_t <a class="code" href="class_udptransmit.html#b2">Connect</a>(<font class="keyword">const</font> <a class="code" href="class_broadcastaddress.html">BroadcastAddress</a> &amp;subnet, tpport_t port);
01102 
01107         sockerror_t <a class="code" href="class_udptransmit.html#b4">Disconnect</a>(<font class="keywordtype">void</font>);
01108 
<a name="l01116"></a><a class="code" href="class_udptransmit.html#b5">01116</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_udpsocket.html#a4">Send</a>(<font class="keywordtype">void</font> *buf, <font class="keywordtype">int</font> len)<font class="keyword"></font>
01117 <font class="keyword">                </font>{return ::send(so, (<font class="keywordtype">char</font> *)buf, len, 0);}
01118 
<a name="l01122"></a><a class="code" href="class_udptransmit.html#b6">01122</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_udptransmit.html#b6">endTransmitter</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01123 <font class="keyword">                </font>{<a class="code" href="class_socket.html#b3">Socket::endSocket</a>();}
01124 
01125         <font class="comment">/*</font>
01126 <font class="comment">         * Get transmitter socket.</font>
01127 <font class="comment">         *</font>
01128 <font class="comment">         * @return transmitter.</font>
01129 <font class="comment">         */</font>
<a name="l01130"></a><a class="code" href="class_udptransmit.html#b7">01130</a>         <font class="keyword">inline</font> SOCKET <a class="code" href="class_udptransmit.html#b7">getTransmitter</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01131 <font class="keyword">                </font>{<font class="keywordflow">return</font> so;};
01132 
01133 <font class="keyword">public</font>:
<a name="l01143"></a><a class="code" href="class_udptransmit.html#a0">01143</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_udptransmit.html#a0">Transmit</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *buffer, size_t len)<font class="keyword"></font>
01144 <font class="keyword">                </font>{return ::send(so, buffer, len, MSG_DONTWAIT);}
01145 
<a name="l01152"></a><a class="code" href="class_udptransmit.html#a1">01152</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="class_udptransmit.html#a1">isOutputReady</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> timeout = 0l)<font class="keyword"></font>
01153 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#a16">Socket::isPending</a>(SOCKET_PENDING_OUTPUT, timeout);};
01154 
01155 
<a name="l01156"></a><a class="code" href="class_udptransmit.html#a2">01156</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="class_socket.html#b11">setRouting</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01157 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#b11">Socket::setRouting</a>(enable);};
01158 
<a name="l01159"></a><a class="code" href="class_udptransmit.html#a3">01159</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="class_socket.html#a8">setTypeOfService</a>(socktos_t tos)<font class="keyword"></font>
01160 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#a8">Socket::setTypeOfService</a>(tos);};
01161 
<a name="l01162"></a><a class="code" href="class_udptransmit.html#a4">01162</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="class_socket.html#b5">setBroadcast</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01163 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#b5">Socket::setBroadcast</a>(enable);};
01164 };
01165 
<a name="l01174"></a><a class="code" href="class_udpreceive.html">01174</a> <font class="keyword">class </font><a class="code" href="class_udpreceive.html">UDPReceive</a> : <font class="keyword">private</font> <a class="code" href="class_udpsocket.html">UDPSocket</a>
01175 {
01176 <font class="keyword">protected</font>:
01188         <a class="code" href="socket_h.html#a11">UDPReceive</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;bind, tpport_t port);
01189 
01198         sockerror_t <a class="code" href="class_udpreceive.html#b1">Connect</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &amp;host, tpport_t port);
01199 
01204         sockerror_t <a class="code" href="class_udpreceive.html#b2">Disconnect</a>(<font class="keywordtype">void</font>);
01205 
<a name="l01212"></a><a class="code" href="class_udpreceive.html#b3">01212</a>         <font class="keywordtype">bool</font> <a class="code" href="class_udpreceive.html#b3">isPendingReceive</a>(timeout_t timeout)<font class="keyword"></font>
01213 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#a16">Socket::isPending</a>(SOCKET_PENDING_INPUT, timeout);};
01214 
<a name="l01218"></a><a class="code" href="class_udpreceive.html#b4">01218</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_udpreceive.html#b4">endReceiver</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01219 <font class="keyword">                </font>{<a class="code" href="class_socket.html#b3">Socket::endSocket</a>();}
01220 
<a name="l01221"></a><a class="code" href="class_udpreceive.html#b5">01221</a>         <font class="keyword">inline</font> SOCKET <a class="code" href="class_udpreceive.html#b5">getReceiver</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01222 <font class="keyword">                </font>{<font class="keywordflow">return</font> so;};
01223 
<a name="l01224"></a><a class="code" href="class_udpreceive.html#b6">01224</a>         <font class="keyword">inline</font> sockerror_t <a class="code" href="class_socket.html#b11">setRouting</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01225 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#b11">Socket::setRouting</a>(enable);};
01226 
01227 <font class="keyword">public</font>:
<a name="l01235"></a><a class="code" href="class_udpreceive.html#a0">01235</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_udpreceive.html#a0">Receive</a>(<font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
01236 <font class="keyword">                </font>{return ::recv(so, (<font class="keywordtype">char</font> *)buf, len, 0);};
01237 
<a name="l01244"></a><a class="code" href="class_udpreceive.html#a1">01244</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="class_udpreceive.html#a1">isInputReady</a>(timeout_t timeout = TIMEOUT_INF)<font class="keyword"></font>
01245 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#a16">Socket::isPending</a>(SOCKET_PENDING_INPUT, timeout);};
01246 };
01247 
<a name="l01258"></a><a class="code" href="class_udpduplex.html">01258</a> <font class="keyword">class </font><a class="code" href="class_udpduplex.html">UDPDuplex</a> : <font class="keyword">public</font> <a class="code" href="class_udptransmit.html">UDPTransmit</a>, <font class="keyword">public</font> <a class="code" href="class_udpreceive.html">UDPReceive</a>
01259 {
01260 <font class="keyword">public</font>:
01269         <a class="code" href="socket_h.html#a12">UDPDuplex</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;bind, tpport_t port);
01270 
01280         sockerror_t <a class="code" href="class_udpreceive.html#b1">Connect</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &amp;host, tpport_t port);
01281 
01288         sockerror_t <a class="code" href="class_udpreceive.html#b2">Disconnect</a>(<font class="keywordtype">void</font>);
01289 };
01290 
01291 
<a name="l01316"></a><a class="code" href="class_tcpsocket.html">01316</a> <font class="keyword">class </font><a class="code" href="class_tcpsocket.html">TCPSocket</a> : <font class="keyword">private</font> <a class="code" href="class_socket.html">Socket</a>
01317 {
01318 <font class="keyword">protected</font>:
01319         <font class="comment">/*</font>
01320 <font class="comment">         * DO NOT OVERWRITE THIS method anymore. THIS WILL NOT WORK!</font>
01321 <font class="comment">         * use </font>
01322 <font class="comment">         *   bool OnAccept(const InetHostAddress &amp;ia, tpport_t port)</font>
01323 <font class="comment">         * instead.</font>
01324 <font class="comment">         * @deprecated</font>
01325 <font class="comment">         *</font>
01326 <font class="comment">        virtual bool OnAccept(const InetHostAddress &amp;ia, short port) {</font>
01327 <font class="comment">                return false;</font>
01328 <font class="comment">        }</font>
01329 <font class="comment">        */</font>
01330 
<a name="l01342"></a><a class="code" href="class_tcpsocket.html#b0">01342</a>         <font class="keyword">virtual</font> <font class="keywordtype">bool</font> <a class="code" href="class_tcpsocket.html#b0">OnAccept</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &amp;ia, tpport_t port)<font class="keyword"></font>
01343 <font class="keyword">                </font>{<font class="keywordflow">return</font> <font class="keyword">true</font>;};
01344 
<a name="l01345"></a><a class="code" href="class_tcpsocket.html#l0">01345</a>         <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="class_tcpstream.html">TCPStream</a>;
<a name="l01346"></a><a class="code" href="class_tcpsocket.html#l1">01346</a>         <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="class_socketport.html">SocketPort</a>;
<a name="l01347"></a><a class="code" href="class_tcpsocket.html#l2">01347</a>         <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="class_tcpstream.html">tcpstream</a>;
01348 
01349 <font class="keyword">public</font>:
01361         <a class="code" href="socket_h.html#a13">TCPSocket</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;bind, tpport_t port, <font class="keywordtype">int</font> backlog = 5);
01362         
<a name="l01371"></a><a class="code" href="class_tcpsocket.html#a1">01371</a>         <font class="keyword">inline</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> <a class="code" href="class_tcpsocket.html#a1">getRequest</a>(tpport_t *port = NULL)<font class="keyword"> const</font>
01372 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#a2">Socket::getSender</a>(port);};
01373 
01377         <font class="keywordtype">void</font> <a class="code" href="class_tcpsocket.html#a2">Reject</a>(<font class="keywordtype">void</font>);
01378 
<a name="l01382"></a><a class="code" href="class_tcpsocket.html#a3">01382</a>         <font class="keyword">inline</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> <a class="code" href="class_socket.html#a4">getLocal</a>(tpport_t *port = NULL)<font class="keyword"> const</font>
01383 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#a4">Socket::getLocal</a>(port);};
01384 
<a name="l01388"></a><a class="code" href="class_tcpsocket.html#a4">01388</a>         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="class_tcpsocket.html#a4">isPendingConnection</a>(timeout_t timeout = TIMEOUT_INF) 
01389                 {<font class="keywordflow">return</font> <a class="code" href="class_socket.html#a16">Socket::isPending</a>(SOCKET_PENDING_INPUT, timeout);}
01390 
<a name="l01394"></a><a class="code" href="class_tcpsocket.html#a5">01394</a>         <a class="code" href="class_tcpsocket.html#a5">~TCPSocket</a>()<font class="keyword"></font>
01395 <font class="keyword">                </font>{<a class="code" href="class_socket.html#b3">endSocket</a>();};
01396 };
01397 
01398 <font class="comment">/*</font>
01399 <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>
01400 <font class="comment">        c:\program files\microsoft visual studio\vc98\include\streamb.h(69) : see declaration of 'streambuf'</font>
01401 <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>
01402 <font class="comment">        c:\program files\microsoft visual studio\vc98\include\iostream.h(66) : see declaration of 'iostream'</font>
01403 <font class="comment">*/</font>
01404 
01405 <font class="preprocessor">#ifdef _MSC_VER</font>
01406 <font class="preprocessor"></font><font class="preprocessor">#pragma warning(disable:4275) // disable C4275 warning</font>
01407 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
01408 <font class="preprocessor"></font>
01422 <font class="preprocessor">#if defined(STLPORT) || defined(__KCC)</font>
01423 <font class="preprocessor"></font><font class="preprocessor">#define std::iostream std::iostream_withassign</font>
01424 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
01425 <font class="preprocessor"></font><font class="preprocessor">#ifdef  __KCC</font>
01426 <font class="preprocessor"></font><font class="keyword">using</font> <a class="code" href="class_std__iostream.html">std::iostream</a>;
01427 <font class="preprocessor">#endif</font>
<a name="l01428"></a><a class="code" href="class_tcpstream.html">01428</a> <font class="preprocessor"></font><font class="keyword">class </font><a class="code" href="class_tcpstream.html">TCPStream</a> : <font class="keyword">public</font> <a class="code" href="class_socket.html">Socket</a>, <font class="keyword">public</font> std::streambuf, <font class="keyword">public</font> std::iostream
01429 {
01430 <font class="keyword">private</font>:
01431         <font class="keyword">inline</font> sockerror_t <a class="code" href="class_socket.html#b5">setBroadcast</a>(<font class="keywordtype">bool</font> enable)<font class="keyword"></font>
01432 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="class_socket.html#b5">Socket::setBroadcast</a>(enable);};
01433 
01434         <font class="keyword">inline</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> <a class="code" href="class_socket.html#a2">getSender</a>(tpport_t *port)<font class="keyword"> const</font>
01435 <font class="keyword">                </font>{<font class="keywordflow">return</font> <a class="code" href="socket_h.html#a4">InetHostAddress</a>();};
01436 
01437         <font class="keywordtype">int</font> doallocate();
01438 
01439         <font class="keyword">friend</font> <a class="code" href="class_tcpstream.html">TCPStream</a>&amp; <a class="code" href="class_tcpstream.html#l0">crlf</a>(<a class="code" href="class_tcpstream.html">TCPStream</a>&amp;);
01440         <font class="keyword">friend</font> <a class="code" href="class_tcpstream.html">TCPStream</a>&amp; <a class="code" href="class_tcpstream.html#l1">lfcr</a>(<a class="code" href="class_tcpstream.html">TCPStream</a>&amp;);
01441 
01442 <font class="keyword">protected</font>:
<a name="l01443"></a><a class="code" href="class_tcpstream.html#n0">01443</a>         timeout_t timeout;
<a name="l01444"></a><a class="code" href="class_tcpstream.html#n1">01444</a>         <font class="keywordtype">int</font> bufsize;
<a name="l01445"></a><a class="code" href="class_tcpstream.html#n3">01445</a>         <font class="keywordtype">char</font> *gbuf, *pbuf;
01446 
01451         <a class="code" href="socket_h.html#a14">TCPStream</a>(<font class="keywordtype">bool</font> throwflag = <font class="keyword">true</font>);
01452 
01459         <font class="keywordtype">void</font> <a class="code" href="class_tcpstream.html#b1">Allocate</a>(<font class="keywordtype">int</font> size);
01460 
01465         <font class="keywordtype">void</font> <a class="code" href="class_tcpstream.html#b2">endStream</a>(<font class="keywordtype">void</font>);
01466 
01473         <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_tcpstream.html#b3">underflow</a>(<font class="keywordtype">void</font>);
01474 
01483         <font class="keywordtype">int</font> <a class="code" href="class_tcpstream.html#b4">uflow</a>(<font class="keywordtype">void</font>);
01484 
01492         <font class="keywordtype">int</font> <a class="code" href="class_tcpstream.html#b5">overflow</a>(<font class="keywordtype">int</font> ch);
01493 
01502         <font class="keywordtype">void</font> <a class="code" href="class_udpreceive.html#b1">Connect</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &amp;host, tpport_t port, <font class="keywordtype">int</font> size);
01503 
<a name="l01511"></a><a class="code" href="class_tcpstream.html#b7">01511</a>         <a class="code" href="class_std__iostream.html">std::iostream</a> *<a class="code" href="class_tcpstream.html#b7">tcp</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01512 <font class="keyword">                </font>{<font class="keywordflow">return</font> ((<a class="code" href="class_std__iostream.html">std::iostream</a> *)<font class="keyword">this</font>);};
01513 
01514 <font class="keyword">public</font>:
01524         <a class="code" href="socket_h.html#a14">TCPStream</a>(<a class="code" href="class_tcpsocket.html">TCPSocket</a> &amp;server, <font class="keywordtype">int</font> size = 512, <font class="keywordtype">bool</font> throwflag = <font class="keyword">true</font>, timeout_t timeout = 0);
01525 
01536         <a class="code" href="socket_h.html#a14">TCPStream</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &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);
01537 
<a name="l01543"></a><a class="code" href="class_tcpstream.html#a2">01543</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_tcpstream.html#a2">setTimeout</a>(timeout_t to)<font class="keyword"></font>
01544 <font class="keyword">                </font>{timeout = to;};
01545 
01552         <a class="code" href="socket_h.html#a14">TCPStream</a>(<font class="keyword">const</font> <a class="code" href="class_tcpstream.html">TCPStream</a> &amp;source);
01553 
<a name="l01558"></a><a class="code" href="class_tcpstream.html#a4">01558</a>         <font class="keyword">virtual</font> <a class="code" href="class_tcpstream.html#a4">~TCPStream</a>()<font class="keyword"></font>
01559 <font class="keyword">                </font>{<a class="code" href="class_tcpstream.html#b2">endStream</a>();};
01560 
01567         <font class="keywordtype">int</font> <a class="code" href="class_tcpstream.html#a5">sync</a>(<font class="keywordtype">void</font>);
01568 
01576         <font class="keywordtype">bool</font> <a class="code" href="class_socket.html#a16">isPending</a>(sockpend_t pend, timeout_t timeout = TIMEOUT_INF);
01577 
<a name="l01583"></a><a class="code" href="class_tcpstream.html#a7">01583</a>         <font class="keywordtype">int</font> <a class="code" href="class_tcpstream.html#a7">getBufferSize</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
01584 <font class="keyword">                </font>{<font class="keywordflow">return</font> bufsize;};
01585 };
01586 
<a name="l01595"></a><a class="code" href="class_tcpstream.html">01595</a> <font class="keyword">class </font><a class="code" href="class_tcpstream.html">tcpstream</a> : <font class="keyword">public</font> <a class="code" href="class_tcpstream.html">TCPStream</a>
01596 {
01597 <font class="keyword">public</font>:
01601         <a class="code" href="socket_h.html#a15">tcpstream</a>();
01602 
01610         <a class="code" href="socket_h.html#a15">tcpstream</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *addr, <font class="keywordtype">int</font> buffer = 512);
01611 
01619         <a class="code" href="socket_h.html#a15">tcpstream</a>(<a class="code" href="class_tcpsocket.html">TCPSocket</a> &amp;tcp, <font class="keywordtype">int</font> buffer = 512);
01620 
01628         <font class="keywordtype">void</font> <a class="code" href="class_tcpstream.html#a3">open</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *addr, <font class="keywordtype">int</font> buffer = 512);
01629 
01636         <font class="keywordtype">void</font> <a class="code" href="class_tcpstream.html#a3">open</a>(<a class="code" href="class_tcpsocket.html">TCPSocket</a> &amp;tcp, <font class="keywordtype">int</font> buffer = 512);
01637 
01641         <font class="keywordtype">void</font> <a class="code" href="class_tcpstream.html#a5">close</a>(<font class="keywordtype">void</font>);
01642 
01646         <font class="keywordtype">bool</font> <a class="code" href="class_inetaddress.html#a14">operator!</a>() <font class="keyword">const</font>;
01647 };              
01648 
<a name="l01659"></a><a class="code" href="class_tcpsession.html">01659</a> <font class="keyword">class </font><a class="code" href="class_tcpsession.html">TCPSession</a> : <font class="keyword">public</font> <a class="code" href="class_tcpstream.html">TCPStream</a>, <font class="keyword">public</font> <a class="code" href="class_thread.html">Thread</a>
01660 {
01661 <font class="keyword">protected</font>:
01674         <font class="keywordtype">int</font> <a class="code" href="class_tcpsession.html#b0">WaitConnection</a>(timeout_t timeout = TIMEOUT_INF);
01675 
01682         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b3">Initial</a>(<font class="keywordtype">void</font>);
01683 
<a name="l01689"></a><a class="code" href="class_tcpsession.html#b2">01689</a>         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b2">Final</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01690 <font class="keyword">                </font>{<font class="keyword">delete</font> <font class="keyword">this</font>;};
01691 <font class="keyword">public</font>:
01703         <a class="code" href="socket_h.html#a16">TCPSession</a>(<a class="code" href="class_semaphore.html">Semaphore</a> *start, <font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &amp;host, 
01704                    tpport_t port, <font class="keywordtype">int</font> size = 512, <font class="keywordtype">int</font> pri = 0, <font class="keywordtype">int</font> stack = 0);
01705 
01717         <a class="code" href="socket_h.html#a16">TCPSession</a>(<a class="code" href="class_semaphore.html">Semaphore</a> *start, <a class="code" href="class_tcpsocket.html">TCPSocket</a> &amp;server, <font class="keywordtype">int</font> size = 512, 
01718                    <font class="keywordtype">int</font> pri = 0, <font class="keywordtype">int</font> stack = 0);
01719 };
01720 
01721 <font class="keyword">extern</font> __EXPORT <a class="code" href="class_std__ostream.html">std::ostream</a> &amp;<a class="code" href="persist_h.html#a7">operator&lt;&lt;</a>(<a class="code" href="class_std__ostream.html">std::ostream</a> &amp;os, <font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;ia);
01722 
<a name="l01723"></a><a class="code" href="socket_h.html#a58">01723</a> <font class="keyword">inline</font> <font class="keyword">struct </font>in_addr getaddress(const <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;ia)
01724         {<font class="keywordflow">return</font> ia.getAddress();}
01725 
01726 <font class="preprocessor">#if defined(WIN32)</font>
01727 <font class="preprocessor"></font>
<a name="l01741"></a><a class="code" href="class_init_wsa.html">01741</a> <font class="keyword">class </font><a class="code" href="class_init_wsa.html">init_WSA</a>
01742 {
01743 <font class="keyword">public</font>:
01744         <a class="code" href="class_init_wsa.html#a0">init_WSA</a>();
01745 <font class="keyword">private</font>:
01746         WSADATA                         wsaData;
01747 };
01748 
01749 <font class="preprocessor">#else // !WIN32</font>
01750 <font class="preprocessor"></font>
01751 <font class="keyword">class </font><a class="code" href="class_socketservice.html">SocketService</a>;
01752 
<a name="l01772"></a><a class="code" href="class_socketport.html">01772</a> <font class="keyword">class </font><a class="code" href="class_socketport.html">SocketPort</a> : <font class="keyword">public</font> <a class="code" href="class_socket.html">Socket</a>, <font class="keyword">public</font> <a class="code" href="class_timerport.html">TimerPort</a>
01773 {
01774 <font class="keyword">private</font>:
01775         <a class="code" href="class_socketport.html">SocketPort</a> *next, *prev;
01776         <a class="code" href="class_socketservice.html">SocketService</a> *service;
01777         <font class="keyword">struct </font>timeval porttimer;
01778 <font class="preprocessor">#ifdef __CCXX_USE_POLL</font>
01779 <font class="preprocessor"></font>        <font class="keyword">struct </font>pollfd   * ufd;
01780 <font class="preprocessor">#endif</font>
01781 <font class="preprocessor"></font>        <font class="keywordtype">bool</font> detect_pending;
01782         <font class="keywordtype">bool</font> detect_output;
01783         <font class="keywordtype">bool</font> detect_disconnect;
01784         
<a name="l01785"></a><a class="code" href="class_socketport.html#l0">01785</a>         <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="class_socketservice.html">SocketService</a>;
01786 
01787 <font class="keyword">protected</font>:
01796         <a class="code" href="class_socketport.html#b0">SocketPort</a>(<a class="code" href="class_socketservice.html">SocketService</a> *svc, <a class="code" href="class_tcpsocket.html">TCPSocket</a> &amp;tcp);
01797 
01806         <a class="code" href="class_socketport.html#b0">SocketPort</a>(<a class="code" href="class_socketservice.html">SocketService</a> *svc, <font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;ia, tpport_t port);
01807 
01813          <font class="keywordtype">void</font> <a class="code" href="class_socketport.html#b2">Attach</a>( <a class="code" href="class_socketservice.html">SocketService</a>* svc );
01814 
01815 
01820         <font class="keyword">virtual</font> <a class="code" href="class_socketport.html#b3">~SocketPort</a>();
01821 
01826         <font class="keywordtype">void</font> <a class="code" href="class_socketport.html#b4">setDetectPending</a>( <font class="keywordtype">bool</font> );
01827         
<a name="l01831"></a><a class="code" href="class_socketport.html#b5">01831</a>         <font class="keywordtype">bool</font> <a class="code" href="class_socketport.html#b5">getDetectPending</a>( <font class="keywordtype">void</font> )<font class="keyword"> const</font>
01832 <font class="keyword">                </font>{ <font class="keywordflow">return</font> detect_pending; }
01833         
01838         <font class="keywordtype">void</font> <a class="code" href="class_socketport.html#b6">setDetectOutput</a>( <font class="keywordtype">bool</font> );
01839         
<a name="l01843"></a><a class="code" href="class_socketport.html#b7">01843</a>         <font class="keywordtype">bool</font> <a class="code" href="class_socketport.html#b7">getDetectOutput</a>( <font class="keywordtype">void</font> )<font class="keyword"> const</font>
01844 <font class="keyword">                </font>{ <font class="keywordflow">return</font> detect_output; }
01845 
<a name="l01850"></a><a class="code" href="class_socketport.html#b8">01850</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_socketport.html#b8">Expired</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01851 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01852 
<a name="l01857"></a><a class="code" href="class_socketport.html#b9">01857</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_socketport.html#b9">Pending</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01858 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01859 
<a name="l01864"></a><a class="code" href="class_socketport.html#b10">01864</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_socketport.html#b10">Output</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01865 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01866 
<a name="l01871"></a><a class="code" href="class_socketport.html#b11">01871</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_udpreceive.html#b2">Disconnect</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01872 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01873 
01884         sockerror_t <a class="code" href="class_tcpstream.html#b6">Connect</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &amp;ia, tpport_t port);
01885 
<a name="l01895"></a><a class="code" href="class_socketport.html#b13">01895</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_udpsocket.html#a4">Send</a>(<font class="keywordtype">void</font> *buf, <font class="keywordtype">int</font> len)<font class="keyword"></font>
01896 <font class="keyword">                </font>{return ::send(so, (<font class="keywordtype">char</font> *)buf, len, 0);};
01897 
<a name="l01906"></a><a class="code" href="class_socketport.html#b14">01906</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_udpsocket.html#a5">Recv</a>(<font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
01907 <font class="keyword">                </font>{return ::recv(so, (<font class="keywordtype">char</font> *)buf, len, 0);};
01908 
<a name="l01917"></a><a class="code" href="class_socketport.html#b15">01917</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_udpsocket.html#a7">Peek</a>(<font class="keywordtype">void</font> *buf, size_t len)<font class="keyword"></font>
01918 <font class="keyword">                </font>{return ::recv(so, (<font class="keywordtype">char</font> *)buf, len, MSG_PEEK);};
01919 
01920 <font class="keyword">public</font>:
01928         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b16">setTimer</a>(timeout_t timeout = 0);
01929 
01937         <font class="keywordtype">void</font> <a class="code" href="class_timerport.html#a2">incTimer</a>(timeout_t timeout);
01938 };
01939 
<a name="l01952"></a><a class="code" href="class_socketservice.html">01952</a> <font class="keyword">class </font><a class="code" href="class_socketservice.html">SocketService</a> : <font class="keyword">public</font> <a class="code" href="class_thread.html">Thread</a>, <font class="keyword">private</font> <a class="code" href="class_mutex.html">Mutex</a>
01953 {
01954 <font class="keyword">private</font>:
01955         fd_set connect;
01956         <font class="keywordtype">int</font> iosync[2];
01957         <font class="keywordtype">int</font> hiwater;
01958         <font class="keywordtype">int</font> count;
01959         <a class="code" href="class_socketport.html">SocketPort</a> *first, *last;
01960 
01966         <font class="keywordtype">void</font> Attach(<a class="code" href="class_socketport.html">SocketPort</a> *port);
01972         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#a5">Detach</a>(<a class="code" href="class_socketport.html">SocketPort</a> *port);
01973         
01977         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b0">Run</a>(<font class="keywordtype">void</font>);
01978 
<a name="l01979"></a><a class="code" href="class_socketservice.html#l0">01979</a>         <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="class_socketport.html">SocketPort</a>;
01980 
01981 <font class="keyword">protected</font>:
<a name="l01987"></a><a class="code" href="class_socketservice.html#b0">01987</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_socketservice.html#b0">OnUpdate</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> buf)<font class="keyword"></font>
01988 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01989 
<a name="l01995"></a><a class="code" href="class_socketservice.html#b1">01995</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_socketservice.html#b1">OnEvent</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01996 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01997 
<a name="l02005"></a><a class="code" href="class_socketservice.html#b2">02005</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_socketservice.html#b2">OnCallback</a>(<a class="code" href="class_socketport.html">SocketPort</a> *port)<font class="keyword"></font>
02006 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
02007 
02008 <font class="keyword">public</font>:
02019         <font class="keywordtype">void</font> <a class="code" href="class_socketservice.html#a0">Update</a>(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> flag = 0xff);
02020 
02027         <a class="code" href="class_socketservice.html#a1">SocketService</a>(<font class="keywordtype">int</font> pri = 0);
02028 
02033         <a class="code" href="class_socketservice.html#a2">~SocketService</a>();
02034 
<a name="l02041"></a><a class="code" href="class_socketservice.html#a3">02041</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_socketservice.html#a3">getCount</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
02042 <font class="keyword">                </font>{<font class="keywordflow">return</font> count;};
02043 };
02044 
02045 <font class="preprocessor">#ifdef  __CCXX_NAMESPACE_H__</font>
02046 <font class="preprocessor"></font><font class="preprocessor">#undef  __CCXX_NAMESPACE_H__</font>
02047 <font class="preprocessor"></font><font class="preprocessor">#include &lt;cc++/<a class="code" href="namespace_h.html">namespace.h</a>&gt;</font>
02048 <font class="preprocessor">#endif</font>
02049 <font class="preprocessor"></font>
02050 <font class="preprocessor">#endif // !WIN32</font>
02051 <font class="preprocessor"></font>
02052 <font class="preprocessor">#endif</font>
02053 <font class="preprocessor"></font>
</div></pre><hr><address><small>Generated at Thu Oct 4 15:32:58 2001 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.5 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
 &copy;&nbsp;1997-2001</small></address>
</body>
</html>