<!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> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> </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 <<a class="code" href="thread_h.html">thread.h</a>></font> 00049 <font class="preprocessor"># endif</font> 00050 <font class="preprocessor"></font><font class="preprocessor"># include <winsock.h></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 <cc++/<a class="code" href="thread_h.html">thread.h</a>></font> 00056 <font class="preprocessor"># elif defined(__CCXX_NAMESPACE_H__)</font> 00057 <font class="preprocessor"></font><font class="preprocessor"># include <cc++/<a class="code" href="macros_h.html">macros.h</a>></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 <iostream></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> &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> &<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> &<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> &<a class="code" href="class_inetaddress.html#a10">operator=</a>(<font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &rhs); 00355 00360 <a class="code" href="class_inetaddress.html">InetAddress</a> &<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> &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> &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&</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &addr, 00419 <font class="keyword">const</font> <a class="code" href="class_inetmaskaddress.html">InetMaskAddress</a> &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> &<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> &<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> &<a class="code" href="class_inethostaddress.html#a3">operator&=</a>(<font class="keyword">const</font> <a class="code" href="class_inetmaskaddress.html">InetMaskAddress</a> &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&</a>(<font class="keyword">const</font> <a class="code" href="class_inethostaddress.html">InetHostAddress</a> &addr, 00477 <font class="keyword">const</font> <a class="code" href="class_inetmaskaddress.html">InetMaskAddress</a> &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> &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> &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> &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> &<a class="code" href="class_inetaddress.html#a10">operator=</a>(<font class="keyword">const</font> <a class="code" href="class_socket.html">Socket</a> &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> &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> &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 *)&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> &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> &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> &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> &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> &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> &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> &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> &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> &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> &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 &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 &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> &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> &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>& <a class="code" href="class_tcpstream.html#l0">crlf</a>(<a class="code" href="class_tcpstream.html">TCPStream</a>&); 01440 <font class="keyword">friend</font> <a class="code" href="class_tcpstream.html">TCPStream</a>& <a class="code" href="class_tcpstream.html#l1">lfcr</a>(<a class="code" href="class_tcpstream.html">TCPStream</a>&); 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> &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> &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> &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> &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> &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> &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> &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> &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> &<a class="code" href="persist_h.html#a7">operator<<</a>(<a class="code" href="class_std__ostream.html">std::ostream</a> &os, <font class="keyword">const</font> <a class="code" href="class_inetaddress.html">InetAddress</a> &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> &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> &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> &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> &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 <cc++/<a class="code" href="namespace_h.html">namespace.h</a>></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>, © 1997-2001</small></address> </body> </html>