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