<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>GNU CommonC++: socket.h Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.4.6 --> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="classes.html"><span>Classes</span></a></li> <li id="current"><a href="files.html"><span>Files</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="examples.html"><span>Examples</span></a></li> </ul></div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul></div> <h1>socket.h</h1><a href="socket_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// Copyright (C) 1999-2005 Open Source Telecom Corporation.</span> <a name="l00002"></a>00002 <span class="comment">//</span> <a name="l00003"></a>00003 <span class="comment">// This program is free software; you can redistribute it and/or modify</span> <a name="l00004"></a>00004 <span class="comment">// it under the terms of the GNU General Public License as published by</span> <a name="l00005"></a>00005 <span class="comment">// the Free Software Foundation; either version 2 of the License, or</span> <a name="l00006"></a>00006 <span class="comment">// (at your option) any later version.</span> <a name="l00007"></a>00007 <span class="comment">//</span> <a name="l00008"></a>00008 <span class="comment">// This program is distributed in the hope that it will be useful,</span> <a name="l00009"></a>00009 <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <a name="l00010"></a>00010 <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> <a name="l00011"></a>00011 <span class="comment">// GNU General Public License for more details.</span> <a name="l00012"></a>00012 <span class="comment">//</span> <a name="l00013"></a>00013 <span class="comment">// You should have received a copy of the GNU General Public License</span> <a name="l00014"></a>00014 <span class="comment">// along with this program; if not, write to the Free Software</span> <a name="l00015"></a>00015 <span class="comment">// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</span> <a name="l00016"></a>00016 <span class="comment">//</span> <a name="l00017"></a>00017 <span class="comment">// As a special exception, you may use this file as part of a free software</span> <a name="l00018"></a>00018 <span class="comment">// library without restriction. Specifically, if other files instantiate</span> <a name="l00019"></a>00019 <span class="comment">// templates or use macros or inline functions from this file, or you compile</span> <a name="l00020"></a>00020 <span class="comment">// this file and link it with other files to produce an executable, this</span> <a name="l00021"></a>00021 <span class="comment">// file does not by itself cause the resulting executable to be covered by</span> <a name="l00022"></a>00022 <span class="comment">// the GNU General Public License. This exception does not however </span> <a name="l00023"></a>00023 <span class="comment">// invalidate any other reasons why the executable file might be covered by</span> <a name="l00024"></a>00024 <span class="comment">// the GNU General Public License. </span> <a name="l00025"></a>00025 <span class="comment">//</span> <a name="l00026"></a>00026 <span class="comment">// This exception applies only to the code released under the name GNU</span> <a name="l00027"></a>00027 <span class="comment">// Common C++. If you copy code from other releases into a copy of GNU</span> <a name="l00028"></a>00028 <span class="comment">// Common C++, as the General Public License permits, the exception does</span> <a name="l00029"></a>00029 <span class="comment">// not apply to the code that you add in this way. To avoid misleading</span> <a name="l00030"></a>00030 <span class="comment">// anyone as to the status of such modified files, you must delete</span> <a name="l00031"></a>00031 <span class="comment">// this exception notice from them.</span> <a name="l00032"></a>00032 <span class="comment">//</span> <a name="l00033"></a>00033 <span class="comment">// If you write modifications of your own for GNU Common C++, it is your choice</span> <a name="l00034"></a>00034 <span class="comment">// whether to permit this exception to apply to your modifications.</span> <a name="l00035"></a>00035 <span class="comment">// If you do not wish that, delete this exception notice.</span> <a name="l00036"></a>00036 <span class="comment">//</span> <a name="l00037"></a>00037 <a name="l00043"></a>00043 <span class="preprocessor">#ifndef CCXX_SOCKET_H_</span> <a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define CCXX_SOCKET_H_</span> <a name="l00045"></a>00045 <span class="preprocessor"></span> <a name="l00046"></a>00046 <span class="preprocessor">#ifndef CCXX_ADDRESS_H_</span> <a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#include <<a class="code" href="address_8h.html">cc++/address.h</a>></span> <a name="l00048"></a>00048 <span class="preprocessor">#endif</span> <a name="l00049"></a>00049 <span class="preprocessor"></span> <a name="l00050"></a>00050 <span class="preprocessor">#if defined(WIN32) && !defined(__CYGWIN32__)</span> <a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#include <io.h></span> <a name="l00052"></a>00052 <span class="preprocessor">#define _IOLEN64 (unsigned)</span> <a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define _IORET64 (int)</span> <a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define TIMEOUT_INF ~((timeout_t) 0)</span> <a name="l00055"></a>00055 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">int</span> socklen_t; <a name="l00056"></a>00056 <span class="preprocessor">#else</span> <a name="l00057"></a><a class="code" href="socket_8h.html#26769957ec1a2beaf223f33b66ee64ab">00057</a> <span class="preprocessor"></span><span class="preprocessor">#define INVALID_SOCKET -1</span> <a name="l00058"></a><a class="code" href="socket_8h.html#8dc8083897335125630f1af5dafd5831">00058</a> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="socket_8h.html#8dc8083897335125630f1af5dafd5831">SOCKET</a>; <a name="l00059"></a>00059 <span class="preprocessor">#endif</span> <a name="l00060"></a>00060 <span class="preprocessor"></span> <a name="l00061"></a>00061 <span class="preprocessor">#ifndef _IOLEN64</span> <a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define _IOLEN64</span> <a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00064"></a>00064 <span class="preprocessor"></span> <a name="l00065"></a>00065 <span class="preprocessor">#ifndef _IORET64</span> <a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define _IORET64</span> <a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00068"></a>00068 <span class="preprocessor"></span> <a name="l00069"></a>00069 <span class="preprocessor">#ifndef MSG_DONTWAIT</span> <a name="l00070"></a><a class="code" href="socket_8h.html#b18d3d439e4a9c8d0f73e7166e8eb376">00070</a> <span class="preprocessor"></span><span class="preprocessor">#define MSG_DONTWAIT 0</span> <a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00072"></a>00072 <span class="preprocessor"></span> <a name="l00073"></a>00073 <span class="preprocessor">#ifdef CCXX_NAMESPACES</span> <a name="l00074"></a>00074 <span class="preprocessor"></span><span class="keyword">namespace </span>ost { <a name="l00075"></a>00075 <span class="preprocessor">#endif</span> <a name="l00076"></a>00076 <span class="preprocessor"></span> <a name="l00080"></a><a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">00080</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a>; <a name="l00081"></a>00081 <a name="l00099"></a><a class="code" href="classost_1_1_socket.html">00099</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> Socket <a name="l00100"></a>00100 { <a name="l00101"></a>00101 <span class="keyword">public</span>: <a name="l00102"></a><a class="code" href="classost_1_1_socket.html#36a69681caa020f1abed34ae71d206ef">00102</a> <span class="keyword">enum</span> Family <a name="l00103"></a>00103 { <a name="l00104"></a>00104 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00105"></a>00105 <span class="preprocessor"></span> IPV6 = AF_INET6, <a name="l00106"></a>00106 <span class="preprocessor">#endif</span> <a name="l00107"></a>00107 <span class="preprocessor"></span> IPV4 = AF_INET <a name="l00108"></a>00108 }; <a name="l00109"></a>00109 <a name="l00110"></a><a class="code" href="classost_1_1_socket.html#aa032e41b920b38a79c875b8ae375799">00110</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> Family Family; <a name="l00111"></a>00111 <a name="l00112"></a><a class="code" href="classost_1_1_socket.html#e056b6dd4f167163083b7ab602fd3f3f">00112</a> <span class="keyword">enum</span> Error <a name="l00113"></a>00113 { <a name="l00114"></a>00114 errSuccess = 0, <a name="l00115"></a>00115 errCreateFailed, <a name="l00116"></a>00116 errCopyFailed, <a name="l00117"></a>00117 errInput, <a name="l00118"></a>00118 errInputInterrupt, <a name="l00119"></a>00119 errResourceFailure, <a name="l00120"></a>00120 errOutput, <a name="l00121"></a>00121 errOutputInterrupt, <a name="l00122"></a>00122 errNotConnected, <a name="l00123"></a>00123 errConnectRefused, <a name="l00124"></a>00124 errConnectRejected, <a name="l00125"></a>00125 errConnectTimeout, <a name="l00126"></a>00126 errConnectFailed, <a name="l00127"></a>00127 errConnectInvalid, <a name="l00128"></a>00128 errConnectBusy, <a name="l00129"></a>00129 errConnectNoRoute, <a name="l00130"></a>00130 errBindingFailed, <a name="l00131"></a>00131 errBroadcastDenied, <a name="l00132"></a>00132 errRoutingDenied, <a name="l00133"></a>00133 errKeepaliveDenied, <a name="l00134"></a>00134 errServiceDenied, <a name="l00135"></a>00135 errServiceUnavailable, <a name="l00136"></a>00136 errMulticastDisabled, <a name="l00137"></a>00137 errTimeout, <a name="l00138"></a>00138 errNoDelay, <a name="l00139"></a>00139 errExtended, <a name="l00140"></a>00140 errLookupFail, <a name="l00141"></a>00141 errSearchErr, <a name="l00142"></a>00142 errInvalidValue <a name="l00143"></a>00143 }; <a name="l00144"></a>00144 <a name="l00145"></a><a class="code" href="classost_1_1_socket.html#3306a277326459f69aa69b474f50d6e2">00145</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> Error Error; <a name="l00146"></a>00146 <a name="l00147"></a><a class="code" href="classost_1_1_socket.html#258f81f5a42d051242f0f49f8192f890">00147</a> <span class="keyword">enum</span> Tos <a name="l00148"></a>00148 { <a name="l00149"></a>00149 tosLowDelay = 0, <a name="l00150"></a>00150 tosThroughput, <a name="l00151"></a>00151 tosReliability, <a name="l00152"></a>00152 tosMinCost, <a name="l00153"></a>00153 tosInvalid <a name="l00154"></a>00154 }; <a name="l00155"></a><a class="code" href="classost_1_1_socket.html#7caa0e1bb24b387bd1c5b8240ea592e1">00155</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> Tos Tos; <a name="l00156"></a>00156 <a name="l00157"></a><a class="code" href="classost_1_1_socket.html#2cb9ccad21fc2f10c23e45cbb99bc6f8">00157</a> <span class="keyword">enum</span> Pending <a name="l00158"></a>00158 { <a name="l00159"></a>00159 pendingInput, <a name="l00160"></a>00160 pendingOutput, <a name="l00161"></a>00161 pendingError <a name="l00162"></a>00162 }; <a name="l00163"></a><a class="code" href="classost_1_1_socket.html#c2fe3b8bf4dfc66c7df11dfa1ce4415c">00163</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> Pending Pending; <a name="l00164"></a>00164 <a name="l00165"></a>00165 <span class="keyword">protected</span>: <a name="l00166"></a><a class="code" href="classost_1_1_socket.html#d17e0a386f4c50a57db3bebe55571066">00166</a> <span class="keyword">enum</span> State <a name="l00167"></a>00167 { <a name="l00168"></a>00168 INITIAL, <a name="l00169"></a>00169 AVAILABLE, <a name="l00170"></a>00170 BOUND, <a name="l00171"></a>00171 CONNECTED, <a name="l00172"></a>00172 CONNECTING, <a name="l00173"></a>00173 STREAM <a name="l00174"></a>00174 }; <a name="l00175"></a><a class="code" href="classost_1_1_socket.html#c8890572886dca1a03a775997f04abba">00175</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> State State; <a name="l00176"></a>00176 <a name="l00177"></a>00177 <span class="keyword">private</span>: <a name="l00178"></a>00178 <span class="comment">// used by exception handlers....</span> <a name="l00179"></a>00179 <span class="keyword">mutable</span> Error errid; <a name="l00180"></a>00180 <span class="keyword">mutable</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *errstr; <a name="l00181"></a>00181 <span class="keyword">mutable</span> <span class="keywordtype">long</span> syserr; <a name="l00182"></a>00182 <a name="l00183"></a>00183 <span class="keywordtype">void</span> setSocket(<span class="keywordtype">void</span>); <a name="l00184"></a>00184 <span class="keyword">friend</span> <a class="code" href="socket_8h.html#8dc8083897335125630f1af5dafd5831">SOCKET</a> dupSocket(<a class="code" href="socket_8h.html#8dc8083897335125630f1af5dafd5831">SOCKET</a> s,<a class="code" href="classost_1_1_socket.html#c8890572886dca1a03a775997f04abba">Socket::State</a> state); <a name="l00185"></a>00185 <a name="l00186"></a>00186 <span class="keyword">protected</span>: <a name="l00187"></a><a class="code" href="classost_1_1_socket.html#795099d3d68f4c3bf7731f263cbd1ace">00187</a> <span class="keyword">static</span> <a class="code" href="classost_1_1_mutex.html">Mutex</a> mutex; <a name="l00188"></a>00188 <a name="l00189"></a>00189 <span class="keyword">mutable</span> <span class="keyword">struct</span> <a name="l00190"></a>00190 <span class="keyword"> </span>{ <a name="l00191"></a><a class="code" href="classost_1_1_socket.html#9ade0c61ad6d9b0d27c71497b6e68bd5">00191</a> <span class="keywordtype">bool</span> thrown: 1; <a name="l00192"></a><a class="code" href="classost_1_1_socket.html#2b6b25a155d401b661d62eef57754bfa">00192</a> <span class="keywordtype">bool</span> broadcast: 1; <a name="l00193"></a><a class="code" href="classost_1_1_socket.html#118af6ea8eba44a8dbe687f2d31a9022">00193</a> <span class="keywordtype">bool</span> route: 1; <a name="l00194"></a><a class="code" href="classost_1_1_socket.html#507d2a060e03c63bbdf0599ffa9d555a">00194</a> <span class="keywordtype">bool</span> keepalive: 1; <a name="l00195"></a><a class="code" href="classost_1_1_socket.html#19604a7ca524f3ee4c7623c7c237ff69">00195</a> <span class="keywordtype">bool</span> loopback: 1; <a name="l00196"></a><a class="code" href="classost_1_1_socket.html#85db9df29af07929253387d76c59ab2b">00196</a> <span class="keywordtype">bool</span> multicast: 1; <a name="l00197"></a><a class="code" href="classost_1_1_socket.html#f1ef1afa83f77869dc56910ff289d0c5">00197</a> <span class="keywordtype">bool</span> completion: 1; <a name="l00198"></a><a class="code" href="classost_1_1_socket.html#617e01f010e15ec81be466052a5a378e">00198</a> <span class="keywordtype">bool</span> linger: 1; <a name="l00199"></a><a class="code" href="classost_1_1_socket.html#6adc7a5d594ab3b8bace496f7a6757e9">00199</a> <span class="keywordtype">unsigned</span> ttl: 8; <a name="l00200"></a>00200 } flags; <a name="l00201"></a>00201 <a name="l00207"></a><a class="code" href="classost_1_1_socket.html#f1291caf47c2e2e72a3214e4da206b07">00207</a> <a class="code" href="socket_8h.html#8dc8083897335125630f1af5dafd5831">SOCKET</a> <span class="keyword">volatile</span> so; <a name="l00208"></a><a class="code" href="classost_1_1_socket.html#72526c7c326a7faa20e96e9be01981ba">00208</a> State <span class="keyword">volatile</span> state; <a name="l00209"></a>00209 <a name="l00218"></a>00218 Error error(Error error, <span class="keywordtype">char</span> *err = NULL, <span class="keywordtype">long</span> systemError = 0) <span class="keyword">const</span>; <a name="l00219"></a>00219 <a name="l00226"></a><a class="code" href="classost_1_1_socket.html#ffe0b3cfd0ff7a2511e91a81a590fe66">00226</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> error(<span class="keywordtype">char</span> *err)<span class="keyword"> const</span> <a name="l00227"></a>00227 <span class="keyword"> </span>{error(errExtended, err);}; <a name="l00228"></a>00228 <a name="l00235"></a><a class="code" href="classost_1_1_socket.html#6f54a68eab25ab41bbe13ba87a48b435">00235</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> setError(<span class="keywordtype">bool</span> enable) <a name="l00236"></a>00236 {flags.thrown = !enable;}; <a name="l00237"></a>00237 <a name="l00243"></a>00243 <span class="keywordtype">void</span> endSocket(<span class="keywordtype">void</span>); <a name="l00244"></a>00244 <a name="l00250"></a>00250 Error connectError(<span class="keywordtype">void</span>); <a name="l00251"></a>00251 <a name="l00255"></a>00255 Error sendLimit(<span class="keywordtype">int</span> limit = 2048); <a name="l00256"></a>00256 <a name="l00260"></a>00260 Error receiveLimit(<span class="keywordtype">int</span> limit = 1); <a name="l00261"></a>00261 <a name="l00268"></a>00268 Error sendTimeout(<a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer); <a name="l00269"></a>00269 <a name="l00276"></a>00276 Error receiveTimeout(<a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer); <a name="l00277"></a>00277 <a name="l00285"></a>00285 Error sendBuffer(<span class="keywordtype">unsigned</span> size); <a name="l00286"></a>00286 <a name="l00294"></a>00294 Error receiveBuffer(<span class="keywordtype">unsigned</span> size); <a name="l00295"></a>00295 <a name="l00303"></a>00303 Error bufferSize(<span class="keywordtype">unsigned</span> size); <a name="l00304"></a>00304 <a name="l00313"></a>00313 Error setBroadcast(<span class="keywordtype">bool</span> enable); <a name="l00314"></a>00314 <a name="l00326"></a>00326 Error setMulticastByFamily(<span class="keywordtype">bool</span> enable, Family family = IPV4); <a name="l00327"></a>00327 <a name="l00336"></a>00336 Error setLoopbackByFamily(<span class="keywordtype">bool</span> enable, Family family = IPV4); <a name="l00337"></a>00337 <a name="l00345"></a>00345 Error setTimeToLiveByFamily(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ttl, Family fam = IPV4); <a name="l00346"></a>00346 <a name="l00353"></a>00353 Error join(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html">IPV4Multicast</a> &ia); <a name="l00354"></a>00354 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00355"></a>00355 <span class="preprocessor"></span> Error join(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_multicast.html">IPV6Multicast</a> &ia); <a name="l00356"></a>00356 <span class="preprocessor">#endif</span> <a name="l00357"></a>00357 <span class="preprocessor"></span> <a name="l00364"></a>00364 Error drop(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html">IPV4Multicast</a> &ia); <a name="l00365"></a>00365 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00366"></a>00366 <span class="preprocessor"></span> Error drop(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_multicast.html">IPV6Multicast</a> &ia); <a name="l00367"></a>00367 <span class="preprocessor">#endif</span> <a name="l00368"></a>00368 <span class="preprocessor"></span> <a name="l00376"></a>00376 Error setRouting(<span class="keywordtype">bool</span> enable); <a name="l00377"></a>00377 <a name="l00378"></a>00378 <a name="l00385"></a>00385 Error setNoDelay(<span class="keywordtype">bool</span> enable); <a name="l00386"></a>00386 <a name="l00398"></a>00398 Socket(<span class="keywordtype">int</span> domain, <span class="keywordtype">int</span> type, <span class="keywordtype">int</span> protocol = 0); <a name="l00399"></a>00399 <a name="l00407"></a>00407 Socket(<a class="code" href="socket_8h.html#8dc8083897335125630f1af5dafd5831">SOCKET</a> fd); <a name="l00408"></a>00408 <a name="l00412"></a>00412 Socket(); <a name="l00413"></a>00413 <a name="l00421"></a>00421 Socket(<span class="keyword">const</span> Socket &source); <a name="l00422"></a>00422 <a name="l00432"></a>00432 ssize_t readLine(<span class="keywordtype">char</span> *buf, size_t len, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l00433"></a>00433 <a name="l00445"></a>00445 <span class="keyword">virtual</span> ssize_t readData(<span class="keywordtype">void</span> * buf,size_t len,<span class="keywordtype">char</span> separator=0,<a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> t=0); <a name="l00446"></a>00446 <a name="l00455"></a>00455 <span class="keyword">virtual</span> ssize_t writeData(<span class="keyword">const</span> <span class="keywordtype">void</span>* buf,size_t len,<a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> t=0); <a name="l00456"></a>00456 <a name="l00457"></a>00457 <span class="keyword">public</span>: <a name="l00465"></a>00465 <span class="keyword">virtual</span> ~Socket(); <a name="l00466"></a>00466 <a name="l00473"></a>00473 <span class="keyword">static</span> <span class="keywordtype">bool</span> check(Family fam); <a name="l00474"></a>00474 <a name="l00478"></a>00478 Socket &operator=(<span class="keyword">const</span> Socket &from); <a name="l00479"></a>00479 <a name="l00489"></a>00489 <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getIPV4Sender(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00490"></a>00490 <a name="l00491"></a><a class="code" href="classost_1_1_socket.html#99197c017c07c6b24d622b107fa46833">00491</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getSender(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l00492"></a>00492 <span class="keyword"> </span>{<span class="keywordflow">return</span> getIPV4Sender(port);} <a name="l00493"></a>00493 <a name="l00494"></a>00494 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00495"></a>00495 <span class="preprocessor"></span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> getIPV6Sender(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00496"></a>00496 <span class="preprocessor">#endif</span> <a name="l00497"></a>00497 <span class="preprocessor"></span> <a name="l00507"></a>00507 <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getIPV4Peer(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00508"></a>00508 <a name="l00509"></a><a class="code" href="classost_1_1_socket.html#6fd1dffdfe9606e56fba838559ff6d67">00509</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getPeer(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l00510"></a>00510 <span class="keyword"> </span>{<span class="keywordflow">return</span> getIPV4Peer(port);} <a name="l00511"></a>00511 <a name="l00512"></a>00512 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00513"></a>00513 <span class="preprocessor"></span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> getIPV6Peer(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00514"></a>00514 <span class="preprocessor">#endif</span> <a name="l00515"></a>00515 <span class="preprocessor"></span> <a name="l00523"></a>00523 <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getIPV4Local(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00524"></a>00524 <a name="l00525"></a><a class="code" href="classost_1_1_socket.html#ca71d871bfda4dfcab0891cb0c8df1d4">00525</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getLocal(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l00526"></a>00526 <span class="keyword"> </span>{<span class="keywordflow">return</span> getIPV4Local(port);} <a name="l00527"></a>00527 <a name="l00528"></a>00528 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00529"></a>00529 <span class="preprocessor"></span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> getIPV6Local(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00530"></a>00530 <span class="preprocessor">#endif</span> <a name="l00531"></a>00531 <span class="preprocessor"></span> <a name="l00559"></a>00559 <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getIPV4NAT(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00560"></a>00560 <a name="l00561"></a><a class="code" href="classost_1_1_socket.html#c3dded47080c852dcebc9998643e8dc6">00561</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getNAT(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port)<span class="keyword"> const</span> <a name="l00562"></a>00562 <span class="keyword"> </span>{<span class="keywordflow">return</span> getIPV4NAT(port);} <a name="l00563"></a>00563 <a name="l00564"></a>00564 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00565"></a>00565 <span class="preprocessor"></span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> getIPV6NAT(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00566"></a>00566 <span class="preprocessor">#endif</span> <a name="l00567"></a>00567 <span class="preprocessor"></span> <a name="l00578"></a>00578 <span class="keywordtype">void</span> setCompletion(<span class="keywordtype">bool</span> immediate); <a name="l00579"></a>00579 <a name="l00585"></a>00585 Error setLinger(<span class="keywordtype">bool</span> linger); <a name="l00586"></a>00586 <a name="l00594"></a>00594 Error setKeepAlive(<span class="keywordtype">bool</span> enable); <a name="l00595"></a>00595 <a name="l00604"></a>00604 Error setTypeOfService(Tos service); <a name="l00605"></a>00605 <a name="l00614"></a>00614 <span class="keywordtype">bool</span> isConnected(<span class="keywordtype">void</span>) <span class="keyword">const</span>; <a name="l00615"></a>00615 <a name="l00623"></a>00623 <span class="keywordtype">bool</span> isActive(<span class="keywordtype">void</span>) <span class="keyword">const</span>; <a name="l00624"></a>00624 <a name="l00629"></a>00629 <span class="keywordtype">bool</span> operator!() <span class="keyword">const</span>; <a name="l00630"></a>00630 <a name="l00637"></a><a class="code" href="classost_1_1_socket.html#8120ca95daa7c488255c308998427ccb">00637</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isBroadcast(<span class="keywordtype">void</span>)<span class="keyword"> const</span> <a name="l00638"></a>00638 <span class="keyword"> </span>{<span class="keywordflow">return</span> flags.broadcast;}; <a name="l00639"></a>00639 <a name="l00645"></a><a class="code" href="classost_1_1_socket.html#0a1e09a4411bf60bb5e2b6235d4e6a46">00645</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isRouted(<span class="keywordtype">void</span>)<span class="keyword"> const</span> <a name="l00646"></a>00646 <span class="keyword"> </span>{<span class="keywordflow">return</span> flags.route;}; <a name="l00647"></a>00647 <a name="l00654"></a><a class="code" href="classost_1_1_socket.html#bfdaefd24888f2d51089bdb31894286e">00654</a> <span class="keyword">inline</span> Error getErrorNumber(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> errid;} <a name="l00655"></a>00655 <a name="l00662"></a><a class="code" href="classost_1_1_socket.html#d1c8bb17f75cfe540853a871081bd9d0">00662</a> <span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *getErrorString(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> errstr;} <a name="l00663"></a>00663 <a name="l00664"></a><a class="code" href="classost_1_1_socket.html#7720aace2bf055d21a6fc33007c88197">00664</a> <span class="keyword">inline</span> <span class="keywordtype">long</span> getSystemError(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> syserr;} <a name="l00665"></a>00665 <a name="l00666"></a>00666 <span class="keyword">const</span> <span class="keywordtype">char</span> *getSystemErrorString(<span class="keywordtype">void</span>) <span class="keyword">const</span>; <a name="l00667"></a>00667 <a name="l00677"></a>00677 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isPending(Pending pend, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>); <a name="l00678"></a>00678 }; <a name="l00679"></a>00679 <a name="l00712"></a><a class="code" href="classost_1_1_u_d_p_socket.html">00712</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> UDPSocket : <span class="keyword">public</span> Socket <a name="l00713"></a>00713 { <a name="l00714"></a>00714 <span class="keyword">private</span>: <a name="l00715"></a>00715 <span class="keyword">inline</span> Error setKeepAlive(<span class="keywordtype">bool</span> enable) <a name="l00716"></a>00716 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#866263b2933c0b7b649829f07ca288ff">Socket::setKeepAlive</a>(enable);}; <a name="l00717"></a>00717 <a name="l00718"></a>00718 <span class="keyword">protected</span>: <a name="l00719"></a>00719 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00720"></a>00720 <span class="preprocessor"></span> <span class="keyword">union</span> <a name="l00721"></a>00721 <span class="keyword"> </span>{ <a name="l00722"></a><a class="code" href="classost_1_1_u_d_p_socket.html#9842db7ec82d337e554d264e7230a705">00722</a> <span class="keyword">struct </span>sockaddr_in6 ipv6; <a name="l00723"></a><a class="code" href="classost_1_1_u_d_p_socket.html#d4c15c1eb5dd4f0ce6d4487b43869215">00723</a> <span class="keyword">struct </span>sockaddr_in ipv4; <a name="l00724"></a>00724 } peer; <a name="l00725"></a>00725 <span class="preprocessor">#else</span> <a name="l00726"></a>00726 <span class="preprocessor"></span> <span class="keyword">union</span> <a name="l00727"></a>00727 <span class="keyword"> </span>{ <a name="l00728"></a>00728 <span class="keyword">struct </span>sockaddr_in ipv4; <a name="l00729"></a>00729 } peer; <a name="l00730"></a>00730 <span class="preprocessor">#endif</span> <a name="l00731"></a>00731 <span class="preprocessor"></span> <a name="l00732"></a><a class="code" href="classost_1_1_u_d_p_socket.html#fe9f40091dc6c57c6743cf0720ab5938">00732</a> Family family; <a name="l00733"></a>00733 <a name="l00734"></a>00734 <span class="keyword">public</span>: <a name="l00738"></a>00738 UDPSocket(Family family = IPV4); <a name="l00739"></a>00739 <a name="l00743"></a>00743 UDPSocket(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, Family family = IPV4); <a name="l00744"></a>00744 <a name="l00754"></a>00754 UDPSocket(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html">IPV4Address</a> &bind, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00755"></a>00755 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00756"></a>00756 <span class="preprocessor"></span> UDPSocket(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html">IPV6Address</a> &bind, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00757"></a>00757 <span class="preprocessor">#endif</span> <a name="l00758"></a>00758 <span class="preprocessor"></span> <a name="l00762"></a>00762 <span class="keyword">virtual</span> ~UDPSocket(); <a name="l00763"></a>00763 <a name="l00767"></a><a class="code" href="classost_1_1_u_d_p_socket.html#fbf86c658fcf48b0ba946a238df091d3">00767</a> <span class="keyword">inline</span> Error setLoopback(<span class="keywordtype">bool</span> enable) <a name="l00768"></a>00768 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#08683bc57bede572b8effb07a3fc68dc">Socket::setLoopbackByFamily</a>(enable, family);} <a name="l00769"></a>00769 <a name="l00773"></a><a class="code" href="classost_1_1_u_d_p_socket.html#ce98f5833ad9834af24e78697699c912">00773</a> <span class="keyword">inline</span> Error setMulticast(<span class="keywordtype">bool</span> enable) <a name="l00774"></a>00774 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#09b396c3fc7316061a3f0539e918a43f">Socket::setMulticastByFamily</a>(enable, family);} <a name="l00775"></a>00775 <a name="l00779"></a><a class="code" href="classost_1_1_u_d_p_socket.html#d3cf52efd8d79b40796d67b59285d2cf">00779</a> <span class="keyword">inline</span> Error setTimeToLive(<span class="keywordtype">char</span> ttl) <a name="l00780"></a>00780 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#23d69227150ae996caf76b01024c1b20">Socket::setTimeToLiveByFamily</a>(ttl, family);} <a name="l00781"></a>00781 <a name="l00789"></a>00789 <span class="keywordtype">void</span> setPeer(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00790"></a>00790 <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00791"></a>00791 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00792"></a>00792 <span class="preprocessor"></span> <span class="keywordtype">void</span> setPeer(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00793"></a>00793 <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00794"></a>00794 <span class="preprocessor">#endif</span> <a name="l00795"></a>00795 <span class="preprocessor"></span> <a name="l00803"></a>00803 <a class="code" href="classost_1_1_socket.html#3306a277326459f69aa69b474f50d6e2">Socket::Error</a> getInterfaceIndex(<span class="keyword">const</span> <span class="keywordtype">char</span> *ethX,<span class="keywordtype">int</span>& InterfaceIndex); <a name="l00804"></a>00804 <a name="l00813"></a>00813 <a class="code" href="classost_1_1_socket.html#3306a277326459f69aa69b474f50d6e2">Socket::Error</a> join(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html">IPV4Multicast</a> &ia,<span class="keywordtype">int</span> InterfaceIndex); <a name="l00814"></a>00814 <a name="l00815"></a>00815 <a name="l00823"></a>00823 ssize_t send(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf, size_t len); <a name="l00824"></a>00824 <a name="l00833"></a>00833 ssize_t receive(<span class="keywordtype">void</span> *buf, size_t len, <span class="keywordtype">bool</span> reply = <span class="keyword">false</span>); <a name="l00834"></a>00834 <a name="l00843"></a>00843 <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getIPV4Peer(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00844"></a><a class="code" href="classost_1_1_u_d_p_socket.html#5d06e7131790dd26cc3cf0b1531af3a2">00844</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getPeer(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l00845"></a>00845 <span class="keyword"> </span>{<span class="keywordflow">return</span> getIPV4Peer(port);} <a name="l00846"></a>00846 <a name="l00847"></a>00847 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00848"></a>00848 <span class="preprocessor"></span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> getIPV6Peer(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00849"></a>00849 <span class="preprocessor">#endif</span> <a name="l00850"></a>00850 <span class="preprocessor"></span> <a name="l00858"></a><a class="code" href="classost_1_1_u_d_p_socket.html#64b09e6ac9325d8f44d7ca7ed59215bf">00858</a> <span class="keyword">inline</span> ssize_t peek(<span class="keywordtype">void</span> *buf, size_t len) <a name="l00859"></a>00859 {<span class="keywordflow">return</span> _IORET64 ::recv(so, (<span class="keywordtype">char</span> *)buf, _IOLEN64 len, MSG_PEEK);}; <a name="l00860"></a>00860 <a name="l00864"></a>00864 <span class="keywordtype">void</span> setPeer(<span class="keyword">const</span> <span class="keywordtype">char</span> *service); <a name="l00865"></a>00865 <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <span class="keywordtype">char</span> *service); <a name="l00866"></a>00866 <a name="l00871"></a>00871 Error disconnect(<span class="keywordtype">void</span>); <a name="l00872"></a>00872 }; <a name="l00873"></a>00873 <a name="l00874"></a>00874 <a name="l00883"></a><a class="code" href="classost_1_1_u_d_p_broadcast.html">00883</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> UDPBroadcast : <span class="keyword">public</span> UDPSocket <a name="l00884"></a>00884 { <a name="l00885"></a>00885 <span class="keyword">private</span>: <a name="l00886"></a>00886 <span class="keywordtype">void</span> setPeer(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &ia, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00887"></a>00887 <a name="l00888"></a>00888 Error setBroadcast(<span class="keywordtype">bool</span> enable) <a name="l00889"></a>00889 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#1a507041ee5741bcdc906707b1735781">Socket::setBroadcast</a>(enable);}; <a name="l00890"></a>00890 <a name="l00891"></a>00891 <span class="keyword">public</span>: <a name="l00898"></a>00898 UDPBroadcast(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html">IPV4Address</a> &ia, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00899"></a>00899 <a name="l00906"></a>00906 <span class="keywordtype">void</span> setPeer(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_broadcast.html">IPV4Broadcast</a> &subnet, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00907"></a>00907 }; <a name="l00908"></a>00908 <a name="l00917"></a><a class="code" href="classost_1_1_u_d_p_transmit.html">00917</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> UDPTransmit : <span class="keyword">protected</span> UDPSocket <a name="l00918"></a>00918 { <a name="l00919"></a>00919 <span class="keyword">private</span>: <a name="l00927"></a>00927 Error cConnect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html">IPV4Address</a> &ia, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00928"></a>00928 <a name="l00929"></a>00929 <span class="keyword">protected</span>: <a name="l00933"></a>00933 UDPTransmit(Family family = IPV4); <a name="l00934"></a>00934 <a name="l00946"></a>00946 UDPTransmit(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html">IPV4Address</a> &bind, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port = 5005); <a name="l00947"></a>00947 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00948"></a>00948 <span class="preprocessor"></span> UDPTransmit(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html">IPV6Address</a> &bind, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port = 5005); <a name="l00949"></a>00949 <span class="preprocessor">#endif</span> <a name="l00950"></a>00950 <span class="preprocessor"></span> <a name="l00960"></a>00960 Error connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00961"></a>00961 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00962"></a>00962 <span class="preprocessor"></span> Error connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html">IPV6Address</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00963"></a>00963 <span class="preprocessor">#endif</span> <a name="l00964"></a>00964 <span class="preprocessor"></span> <a name="l00974"></a>00974 Error connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_broadcast.html">IPV4Broadcast</a> &subnet, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00975"></a>00975 <a name="l00983"></a>00983 Error connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html">IPV4Multicast</a> &mgroup, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00984"></a>00984 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00985"></a>00985 <span class="preprocessor"></span> Error connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_multicast.html">IPV6Multicast</a> &mgroup, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l00986"></a>00986 <span class="preprocessor">#endif</span> <a name="l00987"></a>00987 <span class="preprocessor"></span> <a name="l00995"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#c20e40569ec5502849fa3337dcfdf611">00995</a> <span class="keyword">inline</span> ssize_t send(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf, size_t len) <a name="l00996"></a>00996 {<span class="keywordflow">return</span> _IORET64 ::send(so, (<span class="keyword">const</span> <span class="keywordtype">char</span> *)buf, _IOLEN64 len, 0);} <a name="l00997"></a>00997 <a name="l01001"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#fda647033eb798b91e2c2ef3b089c5b2">01001</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> endTransmitter(<span class="keywordtype">void</span>) <a name="l01002"></a>01002 {<a class="code" href="classost_1_1_socket.html#3ab340e773f0214eefcf66f588bcf174">Socket::endSocket</a>();} <a name="l01003"></a>01003 <a name="l01004"></a>01004 <span class="comment">/*</span> <a name="l01005"></a>01005 <span class="comment"> * Get transmitter socket.</span> <a name="l01006"></a>01006 <span class="comment"> *</span> <a name="l01007"></a>01007 <span class="comment"> * @return transmitter.</span> <a name="l01008"></a>01008 <span class="comment"> */</span> <a name="l01009"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#69b7f01eb52ae82bf91f2eefc0854918">01009</a> <span class="keyword">inline</span> <a class="code" href="socket_8h.html#8dc8083897335125630f1af5dafd5831">SOCKET</a> getTransmitter(<span class="keywordtype">void</span>) <a name="l01010"></a>01010 {<span class="keywordflow">return</span> so;}; <a name="l01011"></a>01011 <a name="l01012"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#4e5c8fb7c2ea5f78454d303169d68b61">01012</a> <span class="keyword">inline</span> Error setMulticast(<span class="keywordtype">bool</span> enable) <a name="l01013"></a>01013 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#09b396c3fc7316061a3f0539e918a43f">Socket::setMulticastByFamily</a>(enable, family);} <a name="l01014"></a>01014 <a name="l01015"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#80800a55f609d62bbd8d7635f4798e6d">01015</a> <span class="keyword">inline</span> Error setTimeToLive(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ttl) <a name="l01016"></a>01016 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#23d69227150ae996caf76b01024c1b20">Socket::setTimeToLiveByFamily</a>(ttl, family);}; <a name="l01017"></a>01017 <a name="l01018"></a>01018 <span class="keyword">public</span>: <a name="l01028"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#b648dd889101cf98bcad682299c48329">01028</a> <span class="keyword">inline</span> ssize_t transmit(<span class="keyword">const</span> <span class="keywordtype">char</span> *buffer, size_t len) <a name="l01029"></a>01029 {<span class="keywordflow">return</span> _IORET64 ::send(so, buffer, _IOLEN64 len, <a class="code" href="socket_8h.html#b18d3d439e4a9c8d0f73e7166e8eb376">MSG_DONTWAIT</a>);} <a name="l01030"></a>01030 <a name="l01037"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#ddc1e1aff22446589d633bacfc436e38">01037</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isOutputReady(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> timeout = 0l) <a name="l01038"></a>01038 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#8eb84be4b5cc91731c16be4f32f5bf3d">Socket::isPending</a>(<a class="code" href="classost_1_1_socket.html#2cb9ccad21fc2f10c23e45cbb99bc6f80c9ffb2c87eb616774ea812fc9739efd">Socket::pendingOutput</a>, timeout);}; <a name="l01039"></a>01039 <a name="l01040"></a>01040 <a name="l01041"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#04ebd34e6cfc70146bfe3789c31d8903">01041</a> <span class="keyword">inline</span> Error setRouting(<span class="keywordtype">bool</span> enable) <a name="l01042"></a>01042 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#2165fdf85e39e6a8aaff3da889ae7e20">Socket::setRouting</a>(enable);}; <a name="l01043"></a>01043 <a name="l01044"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#11c5788901bb8c18af8428efe9c54145">01044</a> <span class="keyword">inline</span> Error setTypeOfService(Tos tos) <a name="l01045"></a>01045 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#e49df7e3c3913147116d8491f77a1b63">Socket::setTypeOfService</a>(tos);}; <a name="l01046"></a>01046 <a name="l01047"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#86e9e41d05629a5e6f3029ace0d55e38">01047</a> <span class="keyword">inline</span> Error setBroadcast(<span class="keywordtype">bool</span> enable) <a name="l01048"></a>01048 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#1a507041ee5741bcdc906707b1735781">Socket::setBroadcast</a>(enable);}; <a name="l01049"></a>01049 }; <a name="l01050"></a>01050 <a name="l01059"></a><a class="code" href="classost_1_1_u_d_p_receive.html">01059</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> UDPReceive : <span class="keyword">protected</span> UDPSocket <a name="l01060"></a>01060 { <a name="l01061"></a>01061 <span class="keyword">protected</span>: <a name="l01072"></a>01072 UDPReceive(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html">IPV4Address</a> &bind, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l01073"></a>01073 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01074"></a>01074 <span class="preprocessor"></span> UDPReceive(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html">IPV6Address</a> &bind, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l01075"></a>01075 <span class="preprocessor">#endif</span> <a name="l01076"></a>01076 <span class="preprocessor"></span> <a name="l01086"></a>01086 Error connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l01087"></a>01087 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01088"></a>01088 <span class="preprocessor"></span> Error connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l01089"></a>01089 <span class="preprocessor">#endif</span> <a name="l01090"></a>01090 <span class="preprocessor"></span> <a name="l01097"></a><a class="code" href="classost_1_1_u_d_p_receive.html#f5beaaf3d4941735b8784c1c1bc0ea99">01097</a> <span class="keywordtype">bool</span> isPendingReceive(<a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout) <a name="l01098"></a>01098 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#8eb84be4b5cc91731c16be4f32f5bf3d">Socket::isPending</a>(<a class="code" href="classost_1_1_socket.html#2cb9ccad21fc2f10c23e45cbb99bc6f8f2d41647f208c78eb97fe77196c55ccc">Socket::pendingInput</a>, timeout);}; <a name="l01099"></a>01099 <a name="l01103"></a><a class="code" href="classost_1_1_u_d_p_receive.html#ee5e39bfbba0ba9cbfb616b0df254bcd">01103</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> endReceiver(<span class="keywordtype">void</span>) <a name="l01104"></a>01104 {<a class="code" href="classost_1_1_socket.html#3ab340e773f0214eefcf66f588bcf174">Socket::endSocket</a>();} <a name="l01105"></a>01105 <a name="l01106"></a><a class="code" href="classost_1_1_u_d_p_receive.html#ab58fbd159ce6d8c3f539038196a0d11">01106</a> <span class="keyword">inline</span> <a class="code" href="socket_8h.html#8dc8083897335125630f1af5dafd5831">SOCKET</a> getReceiver(<span class="keywordtype">void</span>)<span class="keyword"> const</span> <a name="l01107"></a>01107 <span class="keyword"> </span>{<span class="keywordflow">return</span> so;}; <a name="l01108"></a>01108 <a name="l01109"></a><a class="code" href="classost_1_1_u_d_p_receive.html#e28ec2a16ac42d1a14f015ca5daa260f">01109</a> <span class="keyword">inline</span> Error setRouting(<span class="keywordtype">bool</span> enable) <a name="l01110"></a>01110 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#2165fdf85e39e6a8aaff3da889ae7e20">Socket::setRouting</a>(enable);} <a name="l01111"></a>01111 <a name="l01112"></a><a class="code" href="classost_1_1_u_d_p_receive.html#a513f9513f012494e0fbd61d84c665f6">01112</a> <span class="keyword">inline</span> Error setMulticast(<span class="keywordtype">bool</span> enable) <a name="l01113"></a>01113 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#09b396c3fc7316061a3f0539e918a43f">Socket::setMulticastByFamily</a>(enable, family);} <a name="l01114"></a>01114 <a name="l01115"></a><a class="code" href="classost_1_1_u_d_p_receive.html#29df9040b68e4e6b99a03827d7e112c8">01115</a> <span class="keyword">inline</span> Error join(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html">IPV4Multicast</a> &ia) <a name="l01116"></a>01116 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#fb0e2d234f461ce45711bff52ffc96ad">Socket::join</a>(ia);} <a name="l01117"></a>01117 <a name="l01118"></a>01118 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01119"></a><a class="code" href="classost_1_1_u_d_p_receive.html#3d1491c118a0609aa6f67aed9a7a5103">01119</a> <span class="preprocessor"></span> <span class="keyword">inline</span> Error join(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_multicast.html">IPV6Multicast</a> &ia) <a name="l01120"></a>01120 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#fb0e2d234f461ce45711bff52ffc96ad">Socket::join</a>(ia);} <a name="l01121"></a>01121 <span class="preprocessor">#endif</span> <a name="l01122"></a>01122 <span class="preprocessor"></span> <a name="l01123"></a><a class="code" href="classost_1_1_u_d_p_receive.html#6ec872d42da02ac13e3390f4ec6cb98d">01123</a> <span class="keyword">inline</span> Error drop(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html">IPV4Multicast</a> &ia) <a name="l01124"></a>01124 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#c59c08e11070a1602352da5c54332d9e">Socket::drop</a>(ia);} <a name="l01125"></a>01125 <a name="l01126"></a>01126 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01127"></a><a class="code" href="classost_1_1_u_d_p_receive.html#4fb379f4df763e3726c8097d65d4c584">01127</a> <span class="preprocessor"></span> <span class="keyword">inline</span> Error drop(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_multicast.html">IPV6Multicast</a> &ia) <a name="l01128"></a>01128 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#c59c08e11070a1602352da5c54332d9e">Socket::drop</a>(ia);} <a name="l01129"></a>01129 <span class="preprocessor">#endif</span> <a name="l01130"></a>01130 <span class="preprocessor"></span> <a name="l01131"></a>01131 <span class="keyword">public</span>: <a name="l01139"></a><a class="code" href="classost_1_1_u_d_p_receive.html#39f5e896422f2f3dda0948f265b8b013">01139</a> <span class="keyword">inline</span> ssize_t receive(<span class="keywordtype">void</span> *buf, size_t len) <a name="l01140"></a>01140 {<span class="keywordflow">return</span> _IORET64 ::recv(so, (<span class="keywordtype">char</span> *)buf, _IOLEN64 len, 0);}; <a name="l01141"></a>01141 <a name="l01148"></a><a class="code" href="classost_1_1_u_d_p_receive.html#3a63f4aa241374a3550201eaf92c134a">01148</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isInputReady(<a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>) <a name="l01149"></a>01149 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#8eb84be4b5cc91731c16be4f32f5bf3d">Socket::isPending</a>(<a class="code" href="classost_1_1_socket.html#2cb9ccad21fc2f10c23e45cbb99bc6f8f2d41647f208c78eb97fe77196c55ccc">Socket::pendingInput</a>, timeout);}; <a name="l01150"></a>01150 }; <a name="l01151"></a>01151 <a name="l01162"></a><a class="code" href="classost_1_1_u_d_p_duplex.html">01162</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> UDPDuplex : <span class="keyword">public</span> UDPTransmit, <span class="keyword">public</span> UDPReceive <a name="l01163"></a>01163 { <a name="l01164"></a>01164 <span class="keyword">public</span>: <a name="l01172"></a>01172 UDPDuplex(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html">IPV4Address</a> &bind, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l01173"></a>01173 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01174"></a>01174 <span class="preprocessor"></span> UDPDuplex(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html">IPV6Address</a> &bind, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l01175"></a>01175 <span class="preprocessor">#endif</span> <a name="l01176"></a>01176 <span class="preprocessor"></span> <a name="l01186"></a>01186 Error connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l01187"></a>01187 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01188"></a>01188 <span class="preprocessor"></span> Error connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l01189"></a>01189 <span class="preprocessor">#endif</span> <a name="l01190"></a>01190 <span class="preprocessor"></span> <a name="l01197"></a>01197 Error disconnect(<span class="keywordtype">void</span>); <a name="l01198"></a>01198 }; <a name="l01199"></a>01199 <a name="l01200"></a>01200 <a name="l01225"></a><a class="code" href="classost_1_1_t_c_p_socket.html">01225</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> TCPSocket : <span class="keyword">protected</span> Socket <a name="l01226"></a>01226 { <a name="l01227"></a>01227 <span class="keyword">protected</span>: <a name="l01228"></a><a class="code" href="classost_1_1_t_c_p_socket.html#926afdde97f8074cfe21a6c0d23830ed">01228</a> <span class="keywordtype">int</span> segsize; <a name="l01229"></a>01229 <span class="keywordtype">void</span> setSegmentSize(<span class="keywordtype">unsigned</span> mss); <a name="l01230"></a>01230 <a name="l01231"></a>01231 <span class="keyword">public</span>: <a name="l01243"></a>01243 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> onAccept(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &ia, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l01244"></a>01244 <a name="l01248"></a><a class="code" href="classost_1_1_t_c_p_socket.html#58d0e49f75856b2e888e9ac894c489a2">01248</a> <span class="keyword">inline</span> <a class="code" href="socket_8h.html#8dc8083897335125630f1af5dafd5831">SOCKET</a> getSocket(<span class="keywordtype">void</span>) <a name="l01249"></a>01249 {<span class="keywordflow">return</span> so;}; <a name="l01250"></a>01250 <a name="l01254"></a><a class="code" href="classost_1_1_t_c_p_socket.html#e25df03dd4c3abd8da25e20a59ffbc62">01254</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> getSegmentSize(<span class="keywordtype">void</span>) <a name="l01255"></a>01255 {<span class="keywordflow">return</span> segsize;}; <a name="l01256"></a>01256 <a name="l01269"></a>01269 TCPSocket(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html">IPV4Address</a> &bind, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port, <span class="keywordtype">unsigned</span> backlog = 5, <span class="keywordtype">unsigned</span> mss = 536); <a name="l01270"></a>01270 <a name="l01281"></a>01281 TCPSocket(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> backlog = 5, <span class="keywordtype">unsigned</span> mss = 536); <a name="l01282"></a>01282 <a name="l01291"></a><a class="code" href="classost_1_1_t_c_p_socket.html#bb20f4723de2e9641528d9c82f9389d1">01291</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getRequest(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l01292"></a>01292 <span class="keyword"> </span>{<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#7853e912f214a1f6fd05b1335f460f35">Socket::getIPV4Sender</a>(port);} <a name="l01293"></a>01293 <a name="l01297"></a>01297 <span class="keywordtype">void</span> reject(<span class="keywordtype">void</span>); <a name="l01298"></a>01298 <a name="l01302"></a><a class="code" href="classost_1_1_t_c_p_socket.html#a0779bf0973ae5b54a5f323ef62ab4ae">01302</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getLocal(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l01303"></a>01303 <span class="keyword"> </span>{<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#f72396adf4cac5113e722447e48b7916">Socket::getIPV4Local</a>(port);} <a name="l01304"></a>01304 <a name="l01310"></a><a class="code" href="classost_1_1_t_c_p_socket.html#112e8235b317f15e15f6ea264fe81eb7">01310</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isPendingConnection(<a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>) <span class="comment">/* not const -- jfc */</span> <a name="l01311"></a>01311 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#8eb84be4b5cc91731c16be4f32f5bf3d">Socket::isPending</a>(<a class="code" href="classost_1_1_socket.html#2cb9ccad21fc2f10c23e45cbb99bc6f8f2d41647f208c78eb97fe77196c55ccc">Socket::pendingInput</a>, timeout);} <a name="l01312"></a>01312 <a name="l01316"></a>01316 <span class="keyword">virtual</span> ~TCPSocket(); <a name="l01317"></a>01317 }; <a name="l01318"></a>01318 <a name="l01319"></a>01319 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01320"></a>01320 <span class="preprocessor"></span> <a name="l01344"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html">01344</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> TCPV6Socket : <span class="keyword">protected</span> Socket <a name="l01345"></a>01345 { <a name="l01346"></a>01346 <span class="keyword">private</span>: <a name="l01347"></a>01347 <span class="keywordtype">int</span> segsize; <a name="l01348"></a>01348 <span class="keywordtype">void</span> setSegmentSize(<span class="keywordtype">unsigned</span> mss); <a name="l01349"></a>01349 <a name="l01350"></a>01350 <span class="keyword">public</span>: <a name="l01362"></a>01362 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> onAccept(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> &ia, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port); <a name="l01363"></a>01363 <a name="l01367"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html#cede992ad26a20072d38716d44f243dc">01367</a> <span class="keyword">inline</span> <a class="code" href="socket_8h.html#8dc8083897335125630f1af5dafd5831">SOCKET</a> getSocket(<span class="keywordtype">void</span>) <a name="l01368"></a>01368 {<span class="keywordflow">return</span> so;}; <a name="l01369"></a>01369 <a name="l01370"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html#8381cf05daeccc8f78c56a2e1cf33370">01370</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> getSegmentSize(<span class="keywordtype">void</span>) <a name="l01371"></a>01371 {<span class="keywordflow">return</span> segsize;}; <a name="l01372"></a>01372 <a name="l01385"></a>01385 TCPV6Socket(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html">IPV6Address</a> &bind, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port, <span class="keywordtype">unsigned</span> backlog = 5, <span class="keywordtype">unsigned</span> mss = 536); <a name="l01386"></a>01386 <a name="l01397"></a>01397 TCPV6Socket(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> backlog = 5, <span class="keywordtype">unsigned</span> mss = 536); <a name="l01398"></a>01398 <a name="l01407"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html#2afe9be7e5c2390b5d6cf5c18c705a9c">01407</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> getRequest(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l01408"></a>01408 <span class="keyword"> </span>{<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#3e4afdfd4efa11d9898558fe852c4230">Socket::getIPV6Sender</a>(port);} <a name="l01409"></a>01409 <a name="l01413"></a>01413 <span class="keywordtype">void</span> reject(<span class="keywordtype">void</span>); <a name="l01414"></a>01414 <a name="l01418"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html#c886cc40d05790837f9a52bde00c6170">01418</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> getLocal(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l01419"></a>01419 <span class="keyword"> </span>{<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#8410324ca8ddf50751830f59afeaf377">Socket::getIPV6Local</a>(port);} <a name="l01420"></a>01420 <a name="l01426"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html#490ee599f8bdb269f359f33cc7862845">01426</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isPendingConnection(<a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>) <span class="comment">/* not const -- jfc */</span> <a name="l01427"></a>01427 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#8eb84be4b5cc91731c16be4f32f5bf3d">Socket::isPending</a>(<a class="code" href="classost_1_1_socket.html#2cb9ccad21fc2f10c23e45cbb99bc6f8f2d41647f208c78eb97fe77196c55ccc">Socket::pendingInput</a>, timeout);} <a name="l01428"></a>01428 <a name="l01432"></a>01432 <span class="keyword">virtual</span> ~TCPV6Socket(); <a name="l01433"></a>01433 }; <a name="l01434"></a>01434 <a name="l01435"></a>01435 <span class="preprocessor">#endif</span> <a name="l01436"></a>01436 <span class="preprocessor"></span> <a name="l01437"></a>01437 <span class="comment">/*</span> <a name="l01438"></a>01438 <span 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'</span> <a name="l01439"></a>01439 <span class="comment"> c:\program files\microsoft visual studio\vc98\include\streamb.h(69) : see declaration of 'streambuf'</span> <a name="l01440"></a>01440 <span 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'</span> <a name="l01441"></a>01441 <span class="comment"> c:\program files\microsoft visual studio\vc98\include\iostream.h(66) : see declaration of 'iostream'</span> <a name="l01442"></a>01442 <span class="comment">*/</span> <a name="l01443"></a>01443 <a name="l01444"></a>01444 <span class="preprocessor">#ifdef _MSC_VER</span> <a name="l01445"></a>01445 <span class="preprocessor"></span><span class="preprocessor">#pragma warning(disable:4275) // disable C4275 warning</span> <a name="l01446"></a>01446 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l01447"></a>01447 <span class="preprocessor"></span> <a name="l01461"></a><a class="code" href="classost_1_1_t_c_p_stream.html">01461</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> TCPStream : <span class="keyword">protected</span> std::streambuf, <span class="keyword">public</span> Socket, <span class="keyword">public</span> std::iostream <a name="l01462"></a>01462 { <a name="l01463"></a>01463 <span class="keyword">private</span>: <a name="l01464"></a>01464 <span class="keywordtype">int</span> doallocate(); <a name="l01465"></a>01465 <a name="l01466"></a>01466 <span class="keywordtype">void</span> segmentBuffering(<span class="keywordtype">unsigned</span> mss); <a name="l01467"></a>01467 <a name="l01468"></a>01468 <span class="keyword">friend</span> TCPStream& crlf(TCPStream&); <a name="l01469"></a>01469 <span class="keyword">friend</span> TCPStream& lfcr(TCPStream&); <a name="l01470"></a>01470 <a name="l01471"></a>01471 <span class="keyword">protected</span>: <a name="l01472"></a><a class="code" href="classost_1_1_t_c_p_stream.html#e223ae380e2dc9d2e64cde0a577eccf2">01472</a> <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout; <a name="l01473"></a><a class="code" href="classost_1_1_t_c_p_stream.html#1eb7fe5844a5c0a5708d658187e9839b">01473</a> size_t bufsize; <a name="l01474"></a><a class="code" href="classost_1_1_t_c_p_stream.html#ecc5f6b34232ba0fef048f53fdaa51fc">01474</a> Family family; <a name="l01475"></a><a class="code" href="classost_1_1_t_c_p_stream.html#fe373d1dd6090f4627e2361ff3a4fcdd">01475</a> <span class="keywordtype">char</span> *gbuf, *pbuf; <a name="l01476"></a>01476 <a name="l01477"></a>01477 <span class="keyword">public</span>: <a name="l01482"></a>01482 TCPStream(Family family = IPV4, <span class="keywordtype">bool</span> throwflag = <span class="keyword">true</span>, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> to = 0); <a name="l01483"></a>01483 <a name="l01487"></a>01487 <span class="keywordtype">void</span> disconnect(<span class="keywordtype">void</span>); <a name="l01488"></a>01488 <a name="l01492"></a>01492 <span class="keywordtype">int</span> getSegmentSize(<span class="keywordtype">void</span>); <a name="l01493"></a>01493 <a name="l01494"></a>01494 <span class="keyword">protected</span>: <a name="l01501"></a>01501 <span class="keywordtype">void</span> allocate(size_t size); <a name="l01502"></a>01502 <a name="l01507"></a>01507 <span class="keywordtype">void</span> endStream(<span class="keywordtype">void</span>); <a name="l01508"></a>01508 <a name="l01515"></a>01515 <span class="keywordtype">int</span> underflow(); <a name="l01516"></a>01516 <a name="l01525"></a>01525 <span class="keywordtype">int</span> uflow(); <a name="l01526"></a>01526 <a name="l01534"></a>01534 <span class="keywordtype">int</span> overflow(<span class="keywordtype">int</span> ch); <a name="l01535"></a>01535 <a name="l01544"></a>01544 <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port, <span class="keywordtype">unsigned</span> mss = 536); <a name="l01545"></a>01545 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01546"></a>01546 <span class="preprocessor"></span> <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port, <span class="keywordtype">unsigned</span> mss = 536); <a name="l01547"></a>01547 <span class="preprocessor">#endif</span> <a name="l01548"></a>01548 <span class="preprocessor"></span> <a name="l01556"></a>01556 <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> mss = 536); <a name="l01557"></a>01557 <a name="l01565"></a><a class="code" href="classost_1_1_t_c_p_stream.html#5191b9c6d7c2369f96f236ae78b25452">01565</a> std::iostream *tcp(<span class="keywordtype">void</span>) <a name="l01566"></a>01566 {<span class="keywordflow">return</span> ((std::iostream *)<span class="keyword">this</span>);}; <a name="l01567"></a>01567 <a name="l01568"></a>01568 <span class="keyword">public</span>: <a name="l01578"></a>01578 TCPStream(TCPSocket &server, <span class="keywordtype">bool</span> throwflag = <span class="keyword">true</span>, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l01579"></a>01579 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01580"></a>01580 <span class="preprocessor"></span> TCPStream(TCPV6Socket &server, <span class="keywordtype">bool</span> throwflag = <span class="keyword">true</span>, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l01581"></a>01581 <span class="preprocessor">#endif</span> <a name="l01582"></a>01582 <span class="preprocessor"></span> <a name="l01588"></a>01588 <span class="keywordtype">void</span> connect(TCPSocket &server); <a name="l01589"></a>01589 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01590"></a>01590 <span class="preprocessor"></span> <span class="keywordtype">void</span> connect(TCPV6Socket &server); <a name="l01591"></a>01591 <span class="preprocessor">#endif</span> <a name="l01592"></a>01592 <span class="preprocessor"></span> <a name="l01603"></a>01603 TCPStream(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port, <span class="keywordtype">unsigned</span> mss = 536, <span class="keywordtype">bool</span> throwflag = <span class="keyword">true</span>, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l01604"></a>01604 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01605"></a>01605 <span class="preprocessor"></span> TCPStream(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port, <span class="keywordtype">unsigned</span> mss = 536, <span class="keywordtype">bool</span> throwflag = <span class="keyword">true</span>, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l01606"></a>01606 <span class="preprocessor">#endif</span> <a name="l01607"></a>01607 <span class="preprocessor"></span> <a name="l01617"></a>01617 TCPStream(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, Family family = IPV4, <span class="keywordtype">unsigned</span> mss = 536, <span class="keywordtype">bool</span> throwflag = <span class="keyword">false</span>, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer = 0); <a name="l01618"></a>01618 <a name="l01624"></a><a class="code" href="classost_1_1_t_c_p_stream.html#1bdf8e7962c57d6086117d5a790ad3f6">01624</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> setTimeout(<a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer) <a name="l01625"></a>01625 {timeout = timer;}; <a name="l01626"></a>01626 <a name="l01633"></a>01633 TCPStream(<span class="keyword">const</span> TCPStream &source); <a name="l01634"></a>01634 <a name="l01639"></a>01639 <span class="keyword">virtual</span> ~TCPStream(); <a name="l01640"></a>01640 <a name="l01647"></a>01647 <span class="keywordtype">int</span> sync(<span class="keywordtype">void</span>); <a name="l01648"></a>01648 <a name="l01649"></a>01649 <span class="preprocessor">#ifdef HAVE_SNPRINTF</span> <a name="l01650"></a>01650 <span class="preprocessor"></span> <a name="l01656"></a>01656 size_t printf(<span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...); <a name="l01657"></a>01657 <span class="preprocessor">#endif</span> <a name="l01658"></a>01658 <span class="preprocessor"></span> <a name="l01666"></a>01666 <span class="keywordtype">bool</span> isPending(Pending pend, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>); <a name="l01667"></a>01667 <a name="l01675"></a><a class="code" href="classost_1_1_t_c_p_stream.html#0150df4f03d32e200b22d0f06404ac39">01675</a> <span class="keyword">inline</span> ssize_t peek(<span class="keywordtype">void</span> *buf, size_t len) <a name="l01676"></a>01676 {<span class="keywordflow">return</span> _IORET64 ::recv(so, (<span class="keywordtype">char</span> *)buf, _IOLEN64 len, MSG_PEEK);}; <a name="l01677"></a>01677 <a name="l01683"></a><a class="code" href="classost_1_1_t_c_p_stream.html#0d016d7c968dcfcb0d3e15e759af4c5f">01683</a> <span class="keyword">inline</span> size_t getBufferSize(<span class="keywordtype">void</span>)<span class="keyword"> const</span> <a name="l01684"></a>01684 <span class="keyword"> </span>{<span class="keywordflow">return</span> bufsize;}; <a name="l01685"></a>01685 }; <a name="l01686"></a>01686 <a name="l01697"></a><a class="code" href="classost_1_1_t_c_p_session.html">01697</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> TCPSession : <span class="keyword">public</span> <a class="code" href="classost_1_1_thread.html">Thread</a>, <span class="keyword">public</span> TCPStream <a name="l01698"></a>01698 { <a name="l01699"></a>01699 <span class="keyword">private</span>: <a name="l01700"></a>01700 TCPSession(<span class="keyword">const</span> TCPSession &rhs); <span class="comment">// not defined</span> <a name="l01701"></a>01701 <span class="keyword">protected</span>: <a name="l01714"></a>01714 <span class="keywordtype">int</span> waitConnection(<a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>); <a name="l01715"></a>01715 <a name="l01722"></a>01722 <span class="keywordtype">void</span> initial(<span class="keywordtype">void</span>); <a name="l01723"></a>01723 <a name="l01724"></a>01724 <span class="keyword">public</span>: <a name="l01735"></a>01735 TCPSession(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &host, <a name="l01736"></a>01736 <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port, size_t size = 536, <span class="keywordtype">int</span> pri = 0, size_t stack = 0); <a name="l01737"></a>01737 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01738"></a>01738 <span class="preprocessor"></span> TCPSession(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html">IPV6Host</a> &host, <a name="l01739"></a>01739 <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port, size_t size = 536, <span class="keywordtype">int</span> pri = 0, size_t stack = 0); <a name="l01740"></a>01740 <span class="preprocessor">#endif</span> <a name="l01741"></a>01741 <span class="preprocessor"></span> <a name="l01751"></a>01751 TCPSession(TCPSocket &server, <span class="keywordtype">int</span> pri = 0, size_t stack = 0); <a name="l01752"></a>01752 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01753"></a>01753 <span class="preprocessor"></span> TCPSession(TCPV6Socket &server, <span class="keywordtype">int</span> pri = 0, size_t stack = 0); <a name="l01754"></a>01754 <span class="preprocessor">#endif</span> <a name="l01755"></a>01755 <span class="preprocessor"></span> <a name="l01759"></a>01759 <span class="keyword">virtual</span> ~TCPSession(); <a name="l01760"></a>01760 }; <a name="l01761"></a>01761 <a name="l01762"></a>01762 <span class="preprocessor">#if defined(WIN32)</span> <a name="l01763"></a>01763 <span class="preprocessor"></span> <a name="l01773"></a>01773 <span class="keyword">class </span>init_WSA <a name="l01774"></a>01774 { <a name="l01775"></a>01775 <span class="keyword">public</span>: <a name="l01776"></a>01776 init_WSA(); <a name="l01777"></a>01777 ~init_WSA(); <a name="l01778"></a>01778 }; <a name="l01779"></a>01779 <a name="l01780"></a>01780 <span class="preprocessor">#endif // WIN32</span> <a name="l01781"></a>01781 <span class="preprocessor"></span> <a name="l01782"></a><a class="code" href="namespaceost.html#33ac1051cb7ef5d55c254ff51054d2e7">01782</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="namespaceost.html#33ac1051cb7ef5d55c254ff51054d2e7">SimpleTCPStream</a>; <a name="l01783"></a>01783 <a name="l01795"></a><a class="code" href="classost_1_1_simple_t_c_p_stream.html">01795</a> <span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="namespaceost.html#33ac1051cb7ef5d55c254ff51054d2e7">SimpleTCPStream</a> : <span class="keyword">public</span> Socket <a name="l01796"></a>01796 { <a name="l01797"></a>01797 <span class="keyword">private</span>: <a name="l01798"></a>01798 <a name="l01799"></a>01799 <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> getSender(<a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> *port) <span class="keyword">const</span>; <a name="l01800"></a>01800 <a name="l01801"></a>01801 <span class="keyword">protected</span>: <a name="l01806"></a>01806 <a class="code" href="namespaceost.html#33ac1051cb7ef5d55c254ff51054d2e7">SimpleTCPStream</a>(); <a name="l01807"></a>01807 <a name="l01812"></a>01812 <span class="keywordtype">void</span> endStream(<span class="keywordtype">void</span>); <a name="l01813"></a>01813 <a name="l01822"></a>01822 <span class="keywordtype">void</span> Connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port, size_t size); <a name="l01823"></a>01823 <a name="l01824"></a>01824 <a name="l01825"></a>01825 <span class="keyword">public</span>: <a name="l01834"></a>01834 <a class="code" href="namespaceost.html#33ac1051cb7ef5d55c254ff51054d2e7">SimpleTCPStream</a>(TCPSocket &server, size_t size = 512); <a name="l01835"></a>01835 <a name="l01844"></a>01844 <a class="code" href="namespaceost.html#33ac1051cb7ef5d55c254ff51054d2e7">SimpleTCPStream</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html">IPV4Host</a> &host, <a class="code" href="namespaceost.html#3c74a1a40c359fd349f3e3e1b96ebfc7">tpport_t</a> port, size_t size = 512); <a name="l01845"></a>01845 <a name="l01851"></a>01851 <a class="code" href="namespaceost.html#33ac1051cb7ef5d55c254ff51054d2e7">SimpleTCPStream</a>(<span class="keyword">const</span> <a class="code" href="namespaceost.html#33ac1051cb7ef5d55c254ff51054d2e7">SimpleTCPStream</a> &source); <a name="l01852"></a>01852 <a name="l01857"></a>01857 <span class="keyword">virtual</span> ~<a class="code" href="namespaceost.html#33ac1051cb7ef5d55c254ff51054d2e7">SimpleTCPStream</a>(); <a name="l01858"></a>01858 <a name="l01870"></a>01870 <span class="keywordtype">bool</span> isPending(Pending pend, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>); <a name="l01871"></a>01871 <a name="l01872"></a><a class="code" href="classost_1_1_simple_t_c_p_stream.html#50cdae078469b3876506ca4408f69705">01872</a> <span class="keywordtype">void</span> flush() {} <a name="l01873"></a>01873 <a name="l01885"></a>01885 ssize_t read(<span class="keywordtype">char</span> *bytes, size_t length, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l01886"></a>01886 <a name="l01898"></a>01898 ssize_t write(<span class="keyword">const</span> <span class="keywordtype">char</span> *bytes, size_t length, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l01899"></a>01899 <a name="l01913"></a>01913 ssize_t peek(<span class="keywordtype">char</span> *bytes, size_t length, <a class="code" href="thread_8h.html#f412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l01914"></a>01914 <a name="l01915"></a>01915 }; <a name="l01916"></a>01916 <a name="l01917"></a>01917 <span class="preprocessor">#ifdef COMMON_STD_EXCEPTION</span> <a name="l01918"></a>01918 <span class="preprocessor"></span><span class="keyword">class </span><a class="code" href="config_8h.html#d10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> SockException : <span class="keyword">public</span> IOException <a name="l01919"></a>01919 { <a name="l01920"></a>01920 <span class="keyword">private</span>: <a name="l01921"></a>01921 <a class="code" href="classost_1_1_socket.html#3306a277326459f69aa69b474f50d6e2">Socket::Error</a> _socketError; <a name="l01922"></a>01922 <a name="l01923"></a>01923 <span class="keyword">public</span>: <a name="l01924"></a>01924 SockException(<span class="keyword">const</span> String &str, <a class="code" href="classost_1_1_socket.html#3306a277326459f69aa69b474f50d6e2">Socket::Error</a> socketError, <span class="keywordtype">long</span> systemError = 0) : <a name="l01925"></a>01925 IOException(str, systemError), _socketError(socketError) {}; <a name="l01926"></a>01926 <a name="l01927"></a>01927 <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#3306a277326459f69aa69b474f50d6e2">Socket::Error</a> getSocketError()<span class="keyword"> const</span> <a name="l01928"></a>01928 <span class="keyword"> </span>{ <span class="keywordflow">return</span> _socketError; } <a name="l01929"></a>01929 }; <a name="l01930"></a>01930 <span class="preprocessor">#endif</span> <a name="l01931"></a>01931 <span class="preprocessor"></span> <a name="l01932"></a>01932 <span class="preprocessor">#ifdef CCXX_NAMESPACES</span> <a name="l01933"></a>01933 <span class="preprocessor"></span>} <a name="l01934"></a>01934 <span class="preprocessor">#endif</span> <a name="l01935"></a>01935 <span class="preprocessor"></span> <a name="l01936"></a>01936 <span class="preprocessor">#endif</span> <a name="l01937"></a>01937 <span class="preprocessor"></span> </pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Jun 19 10:50:55 2006 for GNU CommonC++ by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address> </body> </html>