<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <title>GNU CommonC++: socket.h Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.6.3 --> <div class="navigation" id="top"> <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="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</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">// Copyright (C) 2006-2009 David Sugar, Tycho Softworks,</span> <a name="l00003"></a>00003 <span class="comment">// Copyright (C) 2009 Leandro Melo de Sales <leandroal@gmail.com></span> <a name="l00004"></a>00004 <span class="comment">//</span> <a name="l00005"></a>00005 <span class="comment">// This program is free software; you can redistribute it and/or modify</span> <a name="l00006"></a>00006 <span class="comment">// it under the terms of the GNU General Public License as published by</span> <a name="l00007"></a>00007 <span class="comment">// the Free Software Foundation; either version 2 of the License, or</span> <a name="l00008"></a>00008 <span class="comment">// (at your option) any later version.</span> <a name="l00009"></a>00009 <span class="comment">//</span> <a name="l00010"></a>00010 <span class="comment">// This program is distributed in the hope that it will be useful,</span> <a name="l00011"></a>00011 <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <a name="l00012"></a>00012 <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> <a name="l00013"></a>00013 <span class="comment">// GNU General Public License for more details.</span> <a name="l00014"></a>00014 <span class="comment">//</span> <a name="l00015"></a>00015 <span class="comment">// You should have received a copy of the GNU General Public License</span> <a name="l00016"></a>00016 <span class="comment">// along with this program; if not, write to the Free Software</span> <a name="l00017"></a>00017 <span class="comment">// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</span> <a name="l00018"></a>00018 <span class="comment">//</span> <a name="l00019"></a>00019 <span class="comment">// As a special exception, you may use this file as part of a free software</span> <a name="l00020"></a>00020 <span class="comment">// library without restriction. Specifically, if other files instantiate</span> <a name="l00021"></a>00021 <span class="comment">// templates or use macros or inline functions from this file, or you compile</span> <a name="l00022"></a>00022 <span class="comment">// this file and link it with other files to produce an executable, this</span> <a name="l00023"></a>00023 <span class="comment">// file does not by itself cause the resulting executable to be covered by</span> <a name="l00024"></a>00024 <span class="comment">// the GNU General Public License. This exception does not however</span> <a name="l00025"></a>00025 <span class="comment">// invalidate any other reasons why the executable file might be covered by</span> <a name="l00026"></a>00026 <span class="comment">// the GNU General Public License.</span> <a name="l00027"></a>00027 <span class="comment">//</span> <a name="l00028"></a>00028 <span class="comment">// This exception applies only to the code released under the name GNU</span> <a name="l00029"></a>00029 <span class="comment">// Common C++. If you copy code from other releases into a copy of GNU</span> <a name="l00030"></a>00030 <span class="comment">// Common C++, as the General Public License permits, the exception does</span> <a name="l00031"></a>00031 <span class="comment">// not apply to the code that you add in this way. To avoid misleading</span> <a name="l00032"></a>00032 <span class="comment">// anyone as to the status of such modified files, you must delete</span> <a name="l00033"></a>00033 <span class="comment">// this exception notice from them.</span> <a name="l00034"></a>00034 <span class="comment">//</span> <a name="l00035"></a>00035 <span class="comment">// If you write modifications of your own for GNU Common C++, it is your choice</span> <a name="l00036"></a>00036 <span class="comment">// whether to permit this exception to apply to your modifications.</span> <a name="l00037"></a>00037 <span class="comment">// If you do not wish that, delete this exception notice.</span> <a name="l00038"></a>00038 <span class="comment">//</span> <a name="l00039"></a>00039 <a name="l00045"></a>00045 <span class="preprocessor">#ifndef CCXX_SOCKET_H_</span> <a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define CCXX_SOCKET_H_</span> <a name="l00047"></a>00047 <span class="preprocessor"></span> <a name="l00048"></a>00048 <span class="preprocessor">#ifndef CCXX_ADDRESS_H_</span> <a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#include <<a class="code" href="address_8h.html" title="Network addresses and sockets related classes.">cc++/address.h</a>></span> <a name="l00050"></a>00050 <span class="preprocessor">#endif</span> <a name="l00051"></a>00051 <span class="preprocessor"></span> <a name="l00052"></a>00052 <span class="preprocessor">#if defined(WIN32) && !defined(__CYGWIN32__)</span> <a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#include <io.h></span> <a name="l00054"></a>00054 <span class="preprocessor">#define _IOLEN64 (unsigned)</span> <a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define _IORET64 (int)</span> <a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define TIMEOUT_INF ~((timeout_t) 0)</span> <a name="l00057"></a>00057 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">int</span> socklen_t; <a name="l00058"></a>00058 <span class="preprocessor">#else</span> <a name="l00059"></a><a class="code" href="socket_8h.html#a26769957ec1a2beaf223f33b66ee64ab">00059</a> <span class="preprocessor"></span><span class="preprocessor">#define INVALID_SOCKET -1</span> <a name="l00060"></a><a class="code" href="socket_8h.html#a8dc8083897335125630f1af5dafd5831">00060</a> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="socket_8h.html#a8dc8083897335125630f1af5dafd5831">SOCKET</a>; <a name="l00061"></a>00061 <span class="preprocessor">#endif</span> <a name="l00062"></a>00062 <span class="preprocessor"></span> <a name="l00063"></a>00063 <span class="preprocessor">#ifndef _IOLEN64</span> <a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define _IOLEN64</span> <a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00066"></a>00066 <span class="preprocessor"></span> <a name="l00067"></a>00067 <span class="preprocessor">#ifndef _IORET64</span> <a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#define _IORET64</span> <a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00070"></a>00070 <span class="preprocessor"></span> <a name="l00071"></a>00071 <span class="preprocessor">#ifndef MSG_DONTWAIT</span> <a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#define MSG_DONTWAIT 0</span> <a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00074"></a>00074 <span class="preprocessor"></span> <a name="l00075"></a>00075 <span class="preprocessor">#ifndef MSG_NOSIGNAL</span> <a name="l00076"></a><a class="code" href="socket_8h.html#a9f55d0e90dc8cc6b2287312435cdde48">00076</a> <span class="preprocessor"></span><span class="preprocessor">#define MSG_NOSIGNAL 0</span> <a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00078"></a>00078 <span class="preprocessor"></span> <a name="l00079"></a>00079 <span class="preprocessor">#ifndef SOCK_DCCP</span> <a name="l00080"></a><a class="code" href="socket_8h.html#a4f9a3faa2c7b9488103960ead54e7d88">00080</a> <span class="preprocessor"></span><span class="preprocessor">#define SOCK_DCCP 6</span> <a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#ifndef IPPROTO_DCCP</span> <a name="l00083"></a><a class="code" href="socket_8h.html#abe40d548994c51723b9da30440be3c08">00083</a> <span class="preprocessor"></span><span class="preprocessor">#define IPPROTO_DCCP 33</span> <a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">#ifndef SOL_DCCP</span> <a name="l00086"></a><a class="code" href="socket_8h.html#ab2290ff3727586e79a74d1319a9fec83">00086</a> <span class="preprocessor"></span><span class="preprocessor">#define SOL_DCCP 269</span> <a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00088"></a><a class="code" href="socket_8h.html#a16c181b16f7720e75f6cc61535cc122d">00088</a> <span class="preprocessor"></span><span class="preprocessor">#define DCCP_SOCKOPT_AVAILABLE_CCIDS 12</span> <a name="l00089"></a><a class="code" href="socket_8h.html#ad44ca1305ac56bb818451e8b63bbe7a2">00089</a> <span class="preprocessor"></span><span class="preprocessor">#define DCCP_SOCKOPT_CCID 13</span> <a name="l00090"></a><a class="code" href="socket_8h.html#af9af996be1e65747467d42107a9fcaa0">00090</a> <span class="preprocessor"></span><span class="preprocessor">#define DCCP_SOCKOPT_TX_CCID 14</span> <a name="l00091"></a><a class="code" href="socket_8h.html#af81f3e7855b319a6eef64a91256c93e1">00091</a> <span class="preprocessor"></span><span class="preprocessor">#define DCCP_SOCKOPT_RX_CCID 15</span> <a name="l00092"></a>00092 <span class="preprocessor"></span> <a name="l00093"></a>00093 <span class="preprocessor">#ifdef CCXX_NAMESPACES</span> <a name="l00094"></a>00094 <span class="preprocessor"></span><span class="keyword">namespace </span>ost { <a name="l00095"></a>00095 <span class="preprocessor">#endif</span> <a name="l00096"></a>00096 <span class="preprocessor"></span> <a name="l00100"></a>00100 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a>; <a name="l00101"></a>00101 <a name="l00119"></a><a class="code" href="classost_1_1_socket.html">00119</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a> <a name="l00120"></a>00120 { <a name="l00121"></a>00121 <span class="keyword">public</span>: <a name="l00122"></a><a class="code" href="classost_1_1_socket.html#a36a69681caa020f1abed34ae71d206ef">00122</a> <span class="keyword">enum</span> <a class="code" href="classost_1_1_socket.html#a36a69681caa020f1abed34ae71d206ef">Family</a> { <a name="l00123"></a>00123 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00124"></a><a class="code" href="classost_1_1_socket.html#a36a69681caa020f1abed34ae71d206efae49b01941932c262f6fbbc8e21d3340d">00124</a> <span class="preprocessor"></span> IPV6 = AF_INET6, <a name="l00125"></a>00125 <span class="preprocessor">#endif</span> <a name="l00126"></a><a class="code" href="classost_1_1_socket.html#a36a69681caa020f1abed34ae71d206efa5bd9a46a5c0f46815c98feeb02e5e926">00126</a> <span class="preprocessor"></span> IPV4 = AF_INET <a name="l00127"></a>00127 }; <a name="l00128"></a>00128 <a name="l00129"></a><a class="code" href="classost_1_1_socket.html#aaa032e41b920b38a79c875b8ae375799">00129</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="classost_1_1_socket.html#a36a69681caa020f1abed34ae71d206ef">Family</a> <a class="code" href="classost_1_1_socket.html#a36a69681caa020f1abed34ae71d206ef">Family</a>; <a name="l00130"></a>00130 <a name="l00131"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">00131</a> <span class="keyword">enum</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> { <a name="l00132"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa706ac48f0deba4e591d9668ea79962e8">00132</a> errSuccess = 0, <a name="l00133"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa8d1d01d77a141c804b50456d70b94e46">00133</a> errCreateFailed, <a name="l00134"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa394bc212b3ab9c69dcb47b1412cedb53">00134</a> errCopyFailed, <a name="l00135"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3faa5b3fc41be74d485b9aca2af43d27424">00135</a> errInput, <a name="l00136"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fac1c33a97e722515f9851b116dc7bf2c5">00136</a> errInputInterrupt, <a name="l00137"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa5833cd0e1a43ae7d420e62ce0851611e">00137</a> errResourceFailure, <a name="l00138"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa1c7ee1231e7e7f8e8b6b1447d6f15090">00138</a> errOutput, <a name="l00139"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3faf67d1bcf85481bc4dd222f91e92deeb4">00139</a> errOutputInterrupt, <a name="l00140"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa672dcab0341a211dcb14e0f848e9b5f9">00140</a> errNotConnected, <a name="l00141"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fade54564fcb05a1744ccbf94f5a1b57a5">00141</a> errConnectRefused, <a name="l00142"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa837e20c1c3c6cf12d670f87afc1e8f66">00142</a> errConnectRejected, <a name="l00143"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3faf1a03fa32f971b5077ebf1cf749e90fa">00143</a> errConnectTimeout, <a name="l00144"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa7646955354dce1249d606a2369ea6eaa">00144</a> errConnectFailed, <a name="l00145"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa1629a51edc39b379b3736a07d07bd782">00145</a> errConnectInvalid, <a name="l00146"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fad21ca357b1645094f6ddcbac26a4deed">00146</a> errConnectBusy, <a name="l00147"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa42e56e9bcd983284be704de1400d991d">00147</a> errConnectNoRoute, <a name="l00148"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa61d62014cda69b8d77dd07141f59252b">00148</a> errBindingFailed, <a name="l00149"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fac3609d1255c9a57b86edc1c9a9a79e42">00149</a> errBroadcastDenied, <a name="l00150"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3faa352506dcb7b1d118837c1808944466f">00150</a> errRoutingDenied, <a name="l00151"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa4e60741a75df84410263a3113090f55a">00151</a> errKeepaliveDenied, <a name="l00152"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa6a5e613ed6f8b222d924e419943a870c">00152</a> errServiceDenied, <a name="l00153"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa4739d2c04636eff1971b3648bda5f672">00153</a> errServiceUnavailable, <a name="l00154"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa8753eb8cc4591d5288c72ba2c91ea956">00154</a> errMulticastDisabled, <a name="l00155"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa5d0c869dc200b3cd1eab866816dc217a">00155</a> errTimeout, <a name="l00156"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fafe1fd02e79a208ee781a5b41f7fb5814">00156</a> errNoDelay, <a name="l00157"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa8f699326e6567ea4171d5821fa417e35">00157</a> errExtended, <a name="l00158"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa337bdb7f7512963ef0354f8be541c71e">00158</a> errLookupFail, <a name="l00159"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa8939131de2df58fc2327933cbd024e49">00159</a> errSearchErr, <a name="l00160"></a><a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3fa9ede2afac3c4df2fd5671d48cbf546dc">00160</a> errInvalidValue <a name="l00161"></a>00161 }; <a name="l00162"></a>00162 <a name="l00163"></a><a class="code" href="classost_1_1_socket.html#a3306a277326459f69aa69b474f50d6e2">00163</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a>; <a name="l00164"></a>00164 <a name="l00165"></a><a class="code" href="classost_1_1_socket.html#a258f81f5a42d051242f0f49f8192f890">00165</a> <span class="keyword">enum</span> <a class="code" href="classost_1_1_socket.html#a258f81f5a42d051242f0f49f8192f890">Tos</a> { <a name="l00166"></a><a class="code" href="classost_1_1_socket.html#a258f81f5a42d051242f0f49f8192f890a2199fbf8a1e891120f27a67559e9b6ff">00166</a> tosLowDelay = 0, <a name="l00167"></a><a class="code" href="classost_1_1_socket.html#a258f81f5a42d051242f0f49f8192f890ae805c8e2bc547dbc94b32ccc19c1396b">00167</a> tosThroughput, <a name="l00168"></a><a class="code" href="classost_1_1_socket.html#a258f81f5a42d051242f0f49f8192f890ad0e7d077cb9c6e6f3e702bc735af87d4">00168</a> tosReliability, <a name="l00169"></a><a class="code" href="classost_1_1_socket.html#a258f81f5a42d051242f0f49f8192f890aed0323ec6ea800b824853441c4ccd3e8">00169</a> tosMinCost, <a name="l00170"></a><a class="code" href="classost_1_1_socket.html#a258f81f5a42d051242f0f49f8192f890ac0b92a366fed8d304b3c91323aa49a15">00170</a> tosInvalid <a name="l00171"></a>00171 }; <a name="l00172"></a><a class="code" href="classost_1_1_socket.html#a7caa0e1bb24b387bd1c5b8240ea592e1">00172</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="classost_1_1_socket.html#a258f81f5a42d051242f0f49f8192f890">Tos</a> <a class="code" href="classost_1_1_socket.html#a258f81f5a42d051242f0f49f8192f890">Tos</a>; <a name="l00173"></a>00173 <a name="l00174"></a><a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8">00174</a> <span class="keyword">enum</span> <a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8">Pending</a> { <a name="l00175"></a><a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8af2d41647f208c78eb97fe77196c55ccc">00175</a> pendingInput, <a name="l00176"></a><a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8a0c9ffb2c87eb616774ea812fc9739efd">00176</a> pendingOutput, <a name="l00177"></a><a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8ad3bac41d6ea72956235766139b8742d6">00177</a> pendingError <a name="l00178"></a>00178 }; <a name="l00179"></a><a class="code" href="classost_1_1_socket.html#ac2fe3b8bf4dfc66c7df11dfa1ce4415c">00179</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8">Pending</a> <a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8">Pending</a>; <a name="l00180"></a>00180 <a name="l00181"></a>00181 <span class="keyword">protected</span>: <a name="l00182"></a><a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066">00182</a> <span class="keyword">enum</span> <a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066">State</a> { <a name="l00183"></a><a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066abd827e310a97ea890353a7ee5f92885c">00183</a> INITIAL, <a name="l00184"></a><a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066a9181006b79c1fc5111fa9fd8adced04d">00184</a> AVAILABLE, <a name="l00185"></a><a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066a6f74458d0045b716df163290d56a5c85">00185</a> BOUND, <a name="l00186"></a><a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066a421a6e01dfd1841341d0dbcd7e821aa6">00186</a> CONNECTED, <a name="l00187"></a><a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066a8240e96a84fba05c787ee8f770bbc47d">00187</a> CONNECTING, <a name="l00188"></a><a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066af623db6499fd0e2eca13da3c94048fd0">00188</a> STREAM <a name="l00189"></a>00189 }; <a name="l00190"></a><a class="code" href="classost_1_1_socket.html#ac8890572886dca1a03a775997f04abba">00190</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066">State</a> <a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066">State</a>; <a name="l00191"></a>00191 <a name="l00192"></a>00192 <span class="keyword">private</span>: <a name="l00193"></a>00193 <span class="comment">// used by exception handlers....</span> <a name="l00194"></a>00194 <span class="keyword">mutable</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> errid; <a name="l00195"></a>00195 <span class="keyword">mutable</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *errstr; <a name="l00196"></a>00196 <span class="keyword">mutable</span> <span class="keywordtype">long</span> syserr; <a name="l00197"></a>00197 <a name="l00198"></a>00198 <span class="keywordtype">void</span> setSocket(<span class="keywordtype">void</span>); <a name="l00199"></a>00199 <span class="keyword">friend</span> <a class="code" href="socket_8h.html#a8dc8083897335125630f1af5dafd5831">SOCKET</a> dupSocket(<a class="code" href="socket_8h.html#a8dc8083897335125630f1af5dafd5831">SOCKET</a> s,<a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066">Socket::State</a> state); <a name="l00200"></a>00200 <a name="l00201"></a>00201 <span class="keyword">protected</span>: <a name="l00202"></a><a class="code" href="classost_1_1_socket.html#a795099d3d68f4c3bf7731f263cbd1ace">00202</a> <span class="keyword">static</span> <a class="code" href="classost_1_1_mutex.html" title="The Mutex class is used to protect a section of code so that at any given time only...">Mutex</a> mutex; <a name="l00203"></a>00203 <a name="l00204"></a>00204 <span class="keyword">mutable</span> <span class="keyword">struct </span>{ <a name="l00205"></a><a class="code" href="classost_1_1_socket.html#a9ade0c61ad6d9b0d27c71497b6e68bd5">00205</a> <span class="keywordtype">bool</span> thrown: 1; <a name="l00206"></a><a class="code" href="classost_1_1_socket.html#a2b6b25a155d401b661d62eef57754bfa">00206</a> <span class="keywordtype">bool</span> broadcast: 1; <a name="l00207"></a><a class="code" href="classost_1_1_socket.html#a118af6ea8eba44a8dbe687f2d31a9022">00207</a> <span class="keywordtype">bool</span> route: 1; <a name="l00208"></a><a class="code" href="classost_1_1_socket.html#a507d2a060e03c63bbdf0599ffa9d555a">00208</a> <span class="keywordtype">bool</span> keepalive: 1; <a name="l00209"></a><a class="code" href="classost_1_1_socket.html#a19604a7ca524f3ee4c7623c7c237ff69">00209</a> <span class="keywordtype">bool</span> loopback: 1; <a name="l00210"></a><a class="code" href="classost_1_1_socket.html#a85db9df29af07929253387d76c59ab2b">00210</a> <span class="keywordtype">bool</span> multicast: 1; <a name="l00211"></a><a class="code" href="classost_1_1_socket.html#af1ef1afa83f77869dc56910ff289d0c5">00211</a> <span class="keywordtype">bool</span> completion: 1; <a name="l00212"></a><a class="code" href="classost_1_1_socket.html#a617e01f010e15ec81be466052a5a378e">00212</a> <span class="keywordtype">bool</span> linger: 1; <a name="l00213"></a><a class="code" href="classost_1_1_socket.html#a6adc7a5d594ab3b8bace496f7a6757e9">00213</a> <span class="keywordtype">unsigned</span> ttl: 8; <a name="l00214"></a>00214 } flags; <a name="l00215"></a>00215 <a name="l00221"></a><a class="code" href="classost_1_1_socket.html#af1291caf47c2e2e72a3214e4da206b07">00221</a> <a class="code" href="socket_8h.html#a8dc8083897335125630f1af5dafd5831">SOCKET</a> <span class="keyword">volatile</span> so; <a name="l00222"></a><a class="code" href="classost_1_1_socket.html#a72526c7c326a7faa20e96e9be01981ba">00222</a> <a class="code" href="classost_1_1_socket.html#ad17e0a386f4c50a57db3bebe55571066">State</a> <span class="keyword">volatile</span> state; <a name="l00223"></a>00223 <a name="l00232"></a>00232 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> <a class="code" href="namespaceost.html#a61faeec2dc6ec946dc3e98979bd93124" title="Manipulator for error level.">error</a>(<a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> <a class="code" href="namespaceost.html#a61faeec2dc6ec946dc3e98979bd93124" title="Manipulator for error level.">error</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *err = NULL, <span class="keywordtype">long</span> systemError = 0) <span class="keyword">const</span>; <a name="l00233"></a>00233 <a name="l00240"></a><a class="code" href="classost_1_1_socket.html#a4f06b1af9c42afcc36739aa6b80982ef">00240</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespaceost.html#a61faeec2dc6ec946dc3e98979bd93124" title="Manipulator for error level.">error</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *err)<span class="keyword"> const</span> <a name="l00241"></a>00241 <span class="keyword"> </span>{<a class="code" href="classost_1_1_socket.html#a4f06b1af9c42afcc36739aa6b80982ef" title="This service is used to throw application defined socket errors where the application...">error</a>(errExtended, err);}; <a name="l00242"></a>00242 <a name="l00249"></a><a class="code" href="classost_1_1_socket.html#a6f54a68eab25ab41bbe13ba87a48b435">00249</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> setError(<span class="keywordtype">bool</span> enable) <a name="l00250"></a>00250 {flags.thrown = !enable;}; <a name="l00251"></a>00251 <a name="l00257"></a>00257 <span class="keywordtype">void</span> endSocket(<span class="keywordtype">void</span>); <a name="l00258"></a>00258 <a name="l00264"></a>00264 Error connectError(<span class="keywordtype">void</span>); <a name="l00265"></a>00265 <a name="l00269"></a>00269 Error sendLimit(<span class="keywordtype">int</span> limit = 2048); <a name="l00270"></a>00270 <a name="l00274"></a>00274 Error receiveLimit(<span class="keywordtype">int</span> limit = 1); <a name="l00275"></a>00275 <a name="l00282"></a>00282 Error sendTimeout(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer); <a name="l00283"></a>00283 <a name="l00290"></a>00290 Error receiveTimeout(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer); <a name="l00291"></a>00291 <a name="l00299"></a>00299 Error sendBuffer(<span class="keywordtype">unsigned</span> size); <a name="l00300"></a>00300 <a name="l00308"></a>00308 Error receiveBuffer(<span class="keywordtype">unsigned</span> size); <a name="l00309"></a>00309 <a name="l00317"></a>00317 Error bufferSize(<span class="keywordtype">unsigned</span> size); <a name="l00318"></a>00318 <a name="l00327"></a>00327 Error setBroadcast(<span class="keywordtype">bool</span> enable); <a name="l00328"></a>00328 <a name="l00340"></a>00340 Error setMulticastByFamily(<span class="keywordtype">bool</span> enable, Family family = IPV4); <a name="l00341"></a>00341 <a name="l00350"></a>00350 Error setLoopbackByFamily(<span class="keywordtype">bool</span> enable, Family family = IPV4); <a name="l00351"></a>00351 <a name="l00359"></a>00359 Error setTimeToLiveByFamily(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ttl, Family fam = IPV4); <a name="l00360"></a>00360 <a name="l00367"></a>00367 Error join(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html" title="A specialization of IPV4Address that provides address validation for multicast addresses...">IPV4Multicast</a> &ia); <a name="l00368"></a>00368 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00369"></a>00369 <span class="preprocessor"></span> Error join(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_multicast.html" title="A specialization of IPV6Address that provides address validation for multicast addresses...">IPV6Multicast</a> &ia); <a name="l00370"></a>00370 <span class="preprocessor">#endif</span> <a name="l00371"></a>00371 <span class="preprocessor"></span> <a name="l00378"></a>00378 Error drop(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html" title="A specialization of IPV4Address that provides address validation for multicast addresses...">IPV4Multicast</a> &ia); <a name="l00379"></a>00379 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00380"></a>00380 <span class="preprocessor"></span> Error drop(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_multicast.html" title="A specialization of IPV6Address that provides address validation for multicast addresses...">IPV6Multicast</a> &ia); <a name="l00381"></a>00381 <span class="preprocessor">#endif</span> <a name="l00382"></a>00382 <span class="preprocessor"></span> <a name="l00390"></a>00390 Error setRouting(<span class="keywordtype">bool</span> enable); <a name="l00391"></a>00391 <a name="l00392"></a>00392 <a name="l00399"></a>00399 Error setNoDelay(<span class="keywordtype">bool</span> enable); <a name="l00400"></a>00400 <a name="l00412"></a>00412 <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a>(<span class="keywordtype">int</span> domain, <span class="keywordtype">int</span> type, <span class="keywordtype">int</span> protocol = 0); <a name="l00413"></a>00413 <a name="l00421"></a>00421 <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a>(<a class="code" href="socket_8h.html#a8dc8083897335125630f1af5dafd5831">SOCKET</a> fd); <a name="l00422"></a>00422 <a name="l00426"></a>00426 <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a>(); <a name="l00427"></a>00427 <a name="l00435"></a>00435 <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a> &source); <a name="l00436"></a>00436 <a name="l00446"></a>00446 ssize_t readLine(<span class="keywordtype">char</span> *buf, <span class="keywordtype">size_t</span> len, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l00447"></a>00447 <a name="l00459"></a>00459 <span class="keyword">virtual</span> ssize_t readData(<span class="keywordtype">void</span> * buf,<span class="keywordtype">size_t</span> len,<span class="keywordtype">char</span> separator=0,<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> t=0); <a name="l00460"></a>00460 <a name="l00469"></a>00469 <span class="keyword">virtual</span> ssize_t writeData(<span class="keyword">const</span> <span class="keywordtype">void</span>* buf,<span class="keywordtype">size_t</span> len,<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> t=0); <a name="l00470"></a>00470 <a name="l00471"></a>00471 <span class="keyword">public</span>: <a name="l00479"></a>00479 <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a>(); <a name="l00480"></a>00480 <a name="l00487"></a>00487 <span class="keyword">static</span> <span class="keywordtype">bool</span> check(Family fam); <a name="l00488"></a>00488 <a name="l00492"></a>00492 <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a> &operator=(<span class="keyword">const</span> <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a> &from); <a name="l00493"></a>00493 <a name="l00503"></a>00503 <span class="keyword">virtual</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getIPV4Sender(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00504"></a>00504 <a name="l00505"></a><a class="code" href="classost_1_1_socket.html#a99197c017c07c6b24d622b107fa46833">00505</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getSender(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l00506"></a>00506 <span class="keyword"> </span>{<span class="keywordflow">return</span> getIPV4Sender(port);} <a name="l00507"></a>00507 <a name="l00508"></a>00508 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00509"></a>00509 <span class="preprocessor"></span> <span class="keyword">virtual</span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> getIPV6Sender(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00510"></a>00510 <span class="preprocessor">#endif</span> <a name="l00511"></a>00511 <span class="preprocessor"></span> <a name="l00521"></a>00521 <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getIPV4Peer(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00522"></a>00522 <a name="l00523"></a><a class="code" href="classost_1_1_socket.html#a6fd1dffdfe9606e56fba838559ff6d67">00523</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getPeer(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l00524"></a>00524 <span class="keyword"> </span>{<span class="keywordflow">return</span> getIPV4Peer(port);} <a name="l00525"></a>00525 <a name="l00526"></a>00526 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00527"></a>00527 <span class="preprocessor"></span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> getIPV6Peer(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00528"></a>00528 <span class="preprocessor">#endif</span> <a name="l00529"></a>00529 <span class="preprocessor"></span> <a name="l00537"></a>00537 <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getIPV4Local(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00538"></a>00538 <a name="l00539"></a><a class="code" href="classost_1_1_socket.html#aca71d871bfda4dfcab0891cb0c8df1d4">00539</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getLocal(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l00540"></a>00540 <span class="keyword"> </span>{<span class="keywordflow">return</span> getIPV4Local(port);} <a name="l00541"></a>00541 <a name="l00542"></a>00542 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00543"></a>00543 <span class="preprocessor"></span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> getIPV6Local(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00544"></a>00544 <span class="preprocessor">#endif</span> <a name="l00545"></a>00545 <span class="preprocessor"></span> <a name="l00573"></a>00573 <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getIPV4NAT(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00574"></a>00574 <a name="l00575"></a><a class="code" href="classost_1_1_socket.html#ac3dded47080c852dcebc9998643e8dc6">00575</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getNAT(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port)<span class="keyword"> const</span> <a name="l00576"></a>00576 <span class="keyword"> </span>{<span class="keywordflow">return</span> getIPV4NAT(port);} <a name="l00577"></a>00577 <a name="l00578"></a>00578 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00579"></a>00579 <span class="preprocessor"></span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> getIPV6NAT(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00580"></a>00580 <span class="preprocessor">#endif</span> <a name="l00581"></a>00581 <span class="preprocessor"></span> <a name="l00592"></a>00592 <span class="keywordtype">void</span> setCompletion(<span class="keywordtype">bool</span> immediate); <a name="l00593"></a>00593 <a name="l00599"></a>00599 Error setLinger(<span class="keywordtype">bool</span> linger); <a name="l00600"></a>00600 <a name="l00608"></a>00608 Error setKeepAlive(<span class="keywordtype">bool</span> enable); <a name="l00609"></a>00609 <a name="l00618"></a>00618 Error setTypeOfService(Tos service); <a name="l00619"></a>00619 <a name="l00628"></a>00628 <span class="keywordtype">bool</span> isConnected(<span class="keywordtype">void</span>) <span class="keyword">const</span>; <a name="l00629"></a>00629 <a name="l00637"></a>00637 <span class="keywordtype">bool</span> isActive(<span class="keywordtype">void</span>) <span class="keyword">const</span>; <a name="l00638"></a>00638 <a name="l00643"></a>00643 <span class="keywordtype">bool</span> operator!() <span class="keyword">const</span>; <a name="l00644"></a>00644 <a name="l00651"></a><a class="code" href="classost_1_1_socket.html#a8120ca95daa7c488255c308998427ccb">00651</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isBroadcast(<span class="keywordtype">void</span>)<span class="keyword"> const</span> <a name="l00652"></a>00652 <span class="keyword"> </span>{<span class="keywordflow">return</span> flags.broadcast;}; <a name="l00653"></a>00653 <a name="l00659"></a><a class="code" href="classost_1_1_socket.html#a0a1e09a4411bf60bb5e2b6235d4e6a46">00659</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isRouted(<span class="keywordtype">void</span>)<span class="keyword"> const</span> <a name="l00660"></a>00660 <span class="keyword"> </span>{<span class="keywordflow">return</span> flags.route;}; <a name="l00661"></a>00661 <a name="l00668"></a><a class="code" href="classost_1_1_socket.html#abfdaefd24888f2d51089bdb31894286e">00668</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> <a class="code" href="classost_1_1_socket.html#abfdaefd24888f2d51089bdb31894286e" title="Often used by a &quot;catch&quot; to fetch the last error of a thrown socket.">getErrorNumber</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> errid;} <a name="l00669"></a>00669 <a name="l00676"></a><a class="code" href="classost_1_1_socket.html#ad1c8bb17f75cfe540853a871081bd9d0">00676</a> <span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classost_1_1_socket.html#ad1c8bb17f75cfe540853a871081bd9d0" title="Often used by a &quot;catch&quot; to fetch the user set error string of a thrown...">getErrorString</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> errstr;} <a name="l00677"></a>00677 <a name="l00678"></a><a class="code" href="classost_1_1_socket.html#a7720aace2bf055d21a6fc33007c88197">00678</a> <span class="keyword">inline</span> <span class="keywordtype">long</span> <a class="code" href="classost_1_1_socket.html#a7720aace2bf055d21a6fc33007c88197">getSystemError</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{<span class="keywordflow">return</span> syserr;} <a name="l00679"></a>00679 <a name="l00680"></a>00680 <span class="keyword">const</span> <span class="keywordtype">char</span> *getSystemErrorString(<span class="keywordtype">void</span>) <span class="keyword">const</span>; <a name="l00681"></a>00681 <a name="l00691"></a>00691 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isPending(Pending pend, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#a74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>); <a name="l00692"></a>00692 }; <a name="l00693"></a>00693 <a name="l00720"></a><a class="code" href="classost_1_1_d_c_c_p_socket.html">00720</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_d_c_c_p_socket.html" title="DCCP sockets are used for stream based connected sessions between two sockets.">DCCPSocket</a> : <span class="keyword">public</span> <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a> <a name="l00721"></a>00721 { <a name="l00722"></a>00722 <span class="keyword">union </span>{ <a name="l00723"></a><a class="code" href="classost_1_1_d_c_c_p_socket.html#a9ac2cdf8619e553d36c2b400b41fb383">00723</a> <span class="keyword">struct </span>sockaddr_in ipv4; <a name="l00724"></a>00724 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00725"></a><a class="code" href="classost_1_1_d_c_c_p_socket.html#a09b8ad0a2d57808bcaa1f8e7022db4e6">00725</a> <span class="preprocessor"></span> <span class="keyword">struct </span>sockaddr_in6 ipv6; <a name="l00726"></a>00726 <span class="preprocessor">#endif</span> <a name="l00727"></a>00727 <span class="preprocessor"></span> } peer; <a name="l00728"></a>00728 <a name="l00729"></a>00729 Family family; <a name="l00730"></a>00730 <a name="l00731"></a>00731 <span class="keyword">public</span>: <a name="l00743"></a>00743 <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" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &ia, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l00744"></a>00744 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00745"></a>00745 <span class="preprocessor"></span> <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" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> &ia, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l00746"></a>00746 <span class="preprocessor">#endif</span> <a name="l00747"></a>00747 <span class="preprocessor"></span> <a name="l00748"></a>00748 <span class="keyword">virtual</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getIPV4Sender(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00749"></a>00749 <a name="l00750"></a>00750 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00751"></a>00751 <span class="preprocessor"></span> <span class="keyword">virtual</span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> getIPV6Sender(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l00752"></a>00752 <span class="preprocessor">#endif</span> <a name="l00753"></a>00753 <span class="preprocessor"></span> <a name="l00765"></a>00765 <a class="code" href="classost_1_1_d_c_c_p_socket.html" title="DCCP sockets are used for stream based connected sessions between two sockets.">DCCPSocket</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html" title="The network name and address objects are all derived from a common IPV4Address base...">IPV4Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <span class="keywordtype">unsigned</span> backlog = 5); <a name="l00766"></a>00766 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00767"></a>00767 <span class="preprocessor"></span> <a class="code" href="classost_1_1_d_c_c_p_socket.html" title="DCCP sockets are used for stream based connected sessions between two sockets.">DCCPSocket</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html" title="The network name and address objects are all derived from a common IPV6Address base...">IPV6Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <span class="keywordtype">unsigned</span> backlog = 5); <a name="l00768"></a>00768 <span class="preprocessor">#endif</span> <a name="l00769"></a>00769 <span class="preprocessor"></span> <a name="l00779"></a>00779 <a class="code" href="classost_1_1_d_c_c_p_socket.html" title="DCCP sockets are used for stream based connected sessions between two sockets.">DCCPSocket</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, Family family = IPV4, <span class="keywordtype">unsigned</span> backlog = 5); <a name="l00780"></a>00780 <a name="l00784"></a>00784 <a class="code" href="classost_1_1_d_c_c_p_socket.html" title="DCCP sockets are used for stream based connected sessions between two sockets.">DCCPSocket</a>(Family family = IPV4); <a name="l00785"></a>00785 <a name="l00789"></a>00789 <a class="code" href="classost_1_1_d_c_c_p_socket.html" title="DCCP sockets are used for stream based connected sessions between two sockets.">DCCPSocket</a>(<a class="code" href="classost_1_1_d_c_c_p_socket.html" title="DCCP sockets are used for stream based connected sessions between two sockets.">DCCPSocket</a>& server, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l00790"></a>00790 <a name="l00794"></a>00794 <span class="keywordtype">void</span> reject(<span class="keywordtype">void</span>); <a name="l00795"></a>00795 <a name="l00799"></a>00799 <span class="keywordtype">void</span> disconnect(<span class="keywordtype">void</span>); <a name="l00800"></a>00800 <a name="l00804"></a>00804 <span class="keywordtype">bool</span> setCCID(<a class="code" href="config_8h.html#a2f658db822f8a23711b5bac1094c2185">uint8</a> ccid); <a name="l00805"></a>00805 <a name="l00809"></a>00809 <span class="keywordtype">int</span> getTxCCID(); <a name="l00810"></a>00810 <a name="l00814"></a>00814 <span class="keywordtype">int</span> getRxCCID(); <a name="l00815"></a>00815 <a name="l00819"></a>00819 <span class="keywordtype">size_t</span> available(); <a name="l00820"></a>00820 <a name="l00828"></a>00828 <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l00829"></a>00829 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00830"></a>00830 <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" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l00831"></a>00831 <span class="preprocessor">#endif</span> <a name="l00832"></a>00832 <span class="preprocessor"></span> <a name="l00836"></a>00836 <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <span class="keywordtype">char</span> *name); <a name="l00837"></a>00837 <a name="l00843"></a><a class="code" href="classost_1_1_d_c_c_p_socket.html#ad50bce35876eae7fc93ec408c397483d">00843</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isPendingConnection(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#a74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>) <span class="comment">/* not const -- jfc */</span> <a name="l00844"></a>00844 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a8eb84be4b5cc91731c16be4f32f5bf3d" title="Get the status of pending operations.">Socket::isPending</a>(<a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8af2d41647f208c78eb97fe77196c55ccc">Socket::pendingInput</a>, timeout);} <a name="l00845"></a>00845 <a name="l00849"></a>00849 <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_d_c_c_p_socket.html" title="DCCP sockets are used for stream based connected sessions between two sockets.">DCCPSocket</a>(); <a name="l00850"></a>00850 }; <a name="l00851"></a>00851 <a name="l00884"></a><a class="code" href="classost_1_1_u_d_p_socket.html">00884</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_u_d_p_socket.html" title="UDP sockets implement the TCP SOCK_DGRAM UDP protocol.">UDPSocket</a> : <span class="keyword">public</span> <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a> <a name="l00885"></a>00885 { <a name="l00886"></a>00886 <span class="keyword">private</span>: <a name="l00887"></a>00887 <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setKeepAlive(<span class="keywordtype">bool</span> enable) <a name="l00888"></a>00888 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a866263b2933c0b7b649829f07ca288ff" title="Set the keep-alive status of this socket and if keep-alive messages will be sent...">Socket::setKeepAlive</a>(enable);}; <a name="l00889"></a>00889 <a name="l00890"></a>00890 <span class="keyword">protected</span>: <a name="l00891"></a>00891 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00892"></a>00892 <span class="preprocessor"></span> <span class="keyword">union </span>{ <a name="l00893"></a><a class="code" href="classost_1_1_u_d_p_socket.html#a9842db7ec82d337e554d264e7230a705">00893</a> <span class="keyword">struct </span>sockaddr_in6 ipv6; <a name="l00894"></a><a class="code" href="classost_1_1_u_d_p_socket.html#ad4c15c1eb5dd4f0ce6d4487b43869215">00894</a> <span class="keyword">struct </span>sockaddr_in ipv4; <a name="l00895"></a>00895 } peer; <a name="l00896"></a>00896 <span class="preprocessor">#else</span> <a name="l00897"></a>00897 <span class="preprocessor"></span> <span class="keyword">union </span>{ <a name="l00898"></a>00898 <span class="keyword">struct </span>sockaddr_in ipv4; <a name="l00899"></a>00899 } peer; <a name="l00900"></a>00900 <span class="preprocessor">#endif</span> <a name="l00901"></a>00901 <span class="preprocessor"></span> <a name="l00902"></a><a class="code" href="classost_1_1_u_d_p_socket.html#afe9f40091dc6c57c6743cf0720ab5938">00902</a> Family family; <a name="l00903"></a>00903 <a name="l00904"></a>00904 <span class="keyword">public</span>: <a name="l00908"></a>00908 <a class="code" href="classost_1_1_u_d_p_socket.html" title="UDP sockets implement the TCP SOCK_DGRAM UDP protocol.">UDPSocket</a>(Family family = IPV4); <a name="l00909"></a>00909 <a name="l00913"></a>00913 <a class="code" href="classost_1_1_u_d_p_socket.html" title="UDP sockets implement the TCP SOCK_DGRAM UDP protocol.">UDPSocket</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, Family family = IPV4); <a name="l00914"></a>00914 <a name="l00924"></a>00924 <a class="code" href="classost_1_1_u_d_p_socket.html" title="UDP sockets implement the TCP SOCK_DGRAM UDP protocol.">UDPSocket</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html" title="The network name and address objects are all derived from a common IPV4Address base...">IPV4Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l00925"></a>00925 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l00926"></a>00926 <span class="preprocessor"></span> <a class="code" href="classost_1_1_u_d_p_socket.html" title="UDP sockets implement the TCP SOCK_DGRAM UDP protocol.">UDPSocket</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html" title="The network name and address objects are all derived from a common IPV6Address base...">IPV6Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l00927"></a>00927 <span class="preprocessor">#endif</span> <a name="l00928"></a>00928 <span class="preprocessor"></span> <a name="l00932"></a>00932 <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_u_d_p_socket.html" title="UDP sockets implement the TCP SOCK_DGRAM UDP protocol.">UDPSocket</a>(); <a name="l00933"></a>00933 <a name="l00937"></a><a class="code" href="classost_1_1_u_d_p_socket.html#afbf86c658fcf48b0ba946a238df091d3">00937</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setLoopback(<span class="keywordtype">bool</span> enable) <a name="l00938"></a>00938 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a08683bc57bede572b8effb07a3fc68dc" title="Set the multicast loopback flag for the socket.">Socket::setLoopbackByFamily</a>(enable, family);} <a name="l00939"></a>00939 <a name="l00943"></a><a class="code" href="classost_1_1_u_d_p_socket.html#ace98f5833ad9834af24e78697699c912">00943</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setMulticast(<span class="keywordtype">bool</span> enable) <a name="l00944"></a>00944 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a09b396c3fc7316061a3f0539e918a43f" title="Setting multicast binds the multicast interface used for the socket to the interface...">Socket::setMulticastByFamily</a>(enable, family);} <a name="l00945"></a>00945 <a name="l00949"></a><a class="code" href="classost_1_1_u_d_p_socket.html#ad3cf52efd8d79b40796d67b59285d2cf">00949</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setTimeToLive(<span class="keywordtype">char</span> ttl) <a name="l00950"></a>00950 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a23d69227150ae996caf76b01024c1b20" title="Set the multicast time to live for a multicast socket.">Socket::setTimeToLiveByFamily</a>(ttl, family);} <a name="l00951"></a>00951 <a name="l00959"></a>00959 <span class="keywordtype">void</span> setPeer(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l00960"></a>00960 <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">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> <span class="keywordtype">void</span> setPeer(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l00963"></a>00963 <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l00964"></a>00964 <span class="preprocessor">#endif</span> <a name="l00965"></a>00965 <span class="preprocessor"></span> <a name="l00973"></a>00973 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Socket::Error</a> getInterfaceIndex(<span class="keyword">const</span> <span class="keywordtype">char</span> *ethX,<span class="keywordtype">int</span>& InterfaceIndex); <a name="l00974"></a>00974 <a name="l00983"></a>00983 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Socket::Error</a> join(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html" title="A specialization of IPV4Address that provides address validation for multicast addresses...">IPV4Multicast</a> &ia,<span class="keywordtype">int</span> InterfaceIndex); <a name="l00984"></a>00984 <a name="l00985"></a>00985 <a name="l00993"></a>00993 ssize_t send(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> len); <a name="l00994"></a>00994 <a name="l01003"></a>01003 ssize_t receive(<span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> len, <span class="keywordtype">bool</span> reply = <span class="keyword">false</span>); <a name="l01004"></a>01004 <a name="l01013"></a>01013 <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getIPV4Peer(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l01014"></a><a class="code" href="classost_1_1_u_d_p_socket.html#a5d06e7131790dd26cc3cf0b1531af3a2">01014</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getPeer(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l01015"></a>01015 <span class="keyword"> </span>{<span class="keywordflow">return</span> getIPV4Peer(port);} <a name="l01016"></a>01016 <a name="l01017"></a>01017 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01018"></a>01018 <span class="preprocessor"></span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> getIPV6Peer(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL) <span class="keyword">const</span>; <a name="l01019"></a>01019 <span class="preprocessor">#endif</span> <a name="l01020"></a>01020 <span class="preprocessor"></span> <a name="l01028"></a><a class="code" href="classost_1_1_u_d_p_socket.html#a64b09e6ac9325d8f44d7ca7ed59215bf">01028</a> <span class="keyword">inline</span> ssize_t peek(<span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> len) <a name="l01029"></a>01029 {<span class="keywordflow">return</span> _IORET64 ::recv(so, (<span class="keywordtype">char</span> *)buf, _IOLEN64 len, MSG_PEEK);}; <a name="l01030"></a>01030 <a name="l01034"></a>01034 <span class="keywordtype">void</span> setPeer(<span class="keyword">const</span> <span class="keywordtype">char</span> *service); <a name="l01035"></a>01035 <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <span class="keywordtype">char</span> *service); <a name="l01036"></a>01036 <a name="l01041"></a>01041 Error disconnect(<span class="keywordtype">void</span>); <a name="l01042"></a>01042 }; <a name="l01043"></a>01043 <a name="l01044"></a>01044 <a name="l01053"></a><a class="code" href="classost_1_1_u_d_p_broadcast.html">01053</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_u_d_p_broadcast.html" title="Representing a UDP socket used for subnet broadcasts, this class provides an alternate...">UDPBroadcast</a> : <span class="keyword">public</span> <a class="code" href="classost_1_1_u_d_p_socket.html" title="UDP sockets implement the TCP SOCK_DGRAM UDP protocol.">UDPSocket</a> <a name="l01054"></a>01054 { <a name="l01055"></a>01055 <span class="keyword">private</span>: <a name="l01056"></a>01056 <span class="keywordtype">void</span> setPeer(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &ia, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01057"></a>01057 <a name="l01058"></a>01058 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setBroadcast(<span class="keywordtype">bool</span> enable) <a name="l01059"></a>01059 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a1a507041ee5741bcdc906707b1735781" title="Set the subnet broadcast flag for the socket.">Socket::setBroadcast</a>(enable);}; <a name="l01060"></a>01060 <a name="l01061"></a>01061 <span class="keyword">public</span>: <a name="l01068"></a>01068 <a class="code" href="classost_1_1_u_d_p_broadcast.html" title="Representing a UDP socket used for subnet broadcasts, this class provides an alternate...">UDPBroadcast</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html" title="The network name and address objects are all derived from a common IPV4Address base...">IPV4Address</a> &ia, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01069"></a>01069 <a name="l01076"></a>01076 <span class="keywordtype">void</span> setPeer(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_broadcast.html" title="The broadcast address object is used to store the broadcast address for a specific...">IPV4Broadcast</a> &subnet, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01077"></a>01077 }; <a name="l01078"></a>01078 <a name="l01087"></a><a class="code" href="classost_1_1_u_d_p_transmit.html">01087</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_u_d_p_transmit.html" title="Representing half of a two-way UDP connection, the UDP transmitter can broadcast...">UDPTransmit</a> : <span class="keyword">protected</span> <a class="code" href="classost_1_1_u_d_p_socket.html" title="UDP sockets implement the TCP SOCK_DGRAM UDP protocol.">UDPSocket</a> <a name="l01088"></a>01088 { <a name="l01089"></a>01089 <span class="keyword">private</span>: <a name="l01097"></a>01097 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> cConnect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html" title="The network name and address objects are all derived from a common IPV4Address base...">IPV4Address</a> &ia, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01098"></a>01098 <a name="l01099"></a>01099 <span class="keyword">protected</span>: <a name="l01103"></a>01103 <a class="code" href="classost_1_1_u_d_p_transmit.html" title="Representing half of a two-way UDP connection, the UDP transmitter can broadcast...">UDPTransmit</a>(<a class="code" href="classost_1_1_socket.html#a36a69681caa020f1abed34ae71d206ef">Family</a> family = IPV4); <a name="l01104"></a>01104 <a name="l01116"></a>01116 <a class="code" href="classost_1_1_u_d_p_transmit.html" title="Representing half of a two-way UDP connection, the UDP transmitter can broadcast...">UDPTransmit</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html" title="The network name and address objects are all derived from a common IPV4Address base...">IPV4Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port = 5005); <a name="l01117"></a>01117 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01118"></a>01118 <span class="preprocessor"></span> <a class="code" href="classost_1_1_u_d_p_transmit.html" title="Representing half of a two-way UDP connection, the UDP transmitter can broadcast...">UDPTransmit</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html" title="The network name and address objects are all derived from a common IPV6Address base...">IPV6Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port = 5005); <a name="l01119"></a>01119 <span class="preprocessor">#endif</span> <a name="l01120"></a>01120 <span class="preprocessor"></span> <a name="l01130"></a>01130 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01131"></a>01131 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01132"></a>01132 <span class="preprocessor"></span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html" title="The network name and address objects are all derived from a common IPV6Address base...">IPV6Address</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01133"></a>01133 <span class="preprocessor">#endif</span> <a name="l01134"></a>01134 <span class="preprocessor"></span> <a name="l01144"></a>01144 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_broadcast.html" title="The broadcast address object is used to store the broadcast address for a specific...">IPV4Broadcast</a> &subnet, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01145"></a>01145 <a name="l01153"></a>01153 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html" title="A specialization of IPV4Address that provides address validation for multicast addresses...">IPV4Multicast</a> &mgroup, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01154"></a>01154 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01155"></a>01155 <span class="preprocessor"></span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_multicast.html" title="A specialization of IPV6Address that provides address validation for multicast addresses...">IPV6Multicast</a> &mgroup, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01156"></a>01156 <span class="preprocessor">#endif</span> <a name="l01157"></a>01157 <span class="preprocessor"></span> <a name="l01165"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#ac20e40569ec5502849fa3337dcfdf611">01165</a> <span class="keyword">inline</span> ssize_t send(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> len) <a name="l01166"></a>01166 {<span class="keywordflow">return</span> _IORET64 ::send(so, (<span class="keyword">const</span> <span class="keywordtype">char</span> *)buf, _IOLEN64 len, <a class="code" href="socket_8h.html#a9f55d0e90dc8cc6b2287312435cdde48">MSG_NOSIGNAL</a>);} <a name="l01167"></a>01167 <a name="l01171"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#afda647033eb798b91e2c2ef3b089c5b2">01171</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> endTransmitter(<span class="keywordtype">void</span>) <a name="l01172"></a>01172 {<a class="code" href="classost_1_1_socket.html#a3ab340e773f0214eefcf66f588bcf174" title="Used as the default destructor for ending a socket.">Socket::endSocket</a>();} <a name="l01173"></a>01173 <a name="l01174"></a>01174 <span class="comment">/*</span> <a name="l01175"></a>01175 <span class="comment"> * Get transmitter socket.</span> <a name="l01176"></a>01176 <span class="comment"> *</span> <a name="l01177"></a>01177 <span class="comment"> * @return transmitter.</span> <a name="l01178"></a>01178 <span class="comment"> */</span> <a name="l01179"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#a69b7f01eb52ae82bf91f2eefc0854918">01179</a> <span class="keyword">inline</span> <a class="code" href="socket_8h.html#a8dc8083897335125630f1af5dafd5831">SOCKET</a> getTransmitter(<span class="keywordtype">void</span>) <a name="l01180"></a>01180 {<span class="keywordflow">return</span> so;}; <a name="l01181"></a>01181 <a name="l01182"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#a4e5c8fb7c2ea5f78454d303169d68b61">01182</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setMulticast(<span class="keywordtype">bool</span> enable) <a name="l01183"></a>01183 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a09b396c3fc7316061a3f0539e918a43f" title="Setting multicast binds the multicast interface used for the socket to the interface...">Socket::setMulticastByFamily</a>(enable, family);} <a name="l01184"></a>01184 <a name="l01185"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#a80800a55f609d62bbd8d7635f4798e6d">01185</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setTimeToLive(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ttl) <a name="l01186"></a>01186 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a23d69227150ae996caf76b01024c1b20" title="Set the multicast time to live for a multicast socket.">Socket::setTimeToLiveByFamily</a>(ttl, family);}; <a name="l01187"></a>01187 <a name="l01188"></a>01188 <span class="keyword">public</span>: <a name="l01198"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#ab648dd889101cf98bcad682299c48329">01198</a> <span class="keyword">inline</span> ssize_t transmit(<span class="keyword">const</span> <span class="keywordtype">char</span> *buffer, <span class="keywordtype">size_t</span> len) <a name="l01199"></a>01199 {<span class="keywordflow">return</span> _IORET64 ::send(so, buffer, _IOLEN64 len, MSG_DONTWAIT|<a class="code" href="socket_8h.html#a9f55d0e90dc8cc6b2287312435cdde48">MSG_NOSIGNAL</a>);} <a name="l01200"></a>01200 <a name="l01207"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#addc1e1aff22446589d633bacfc436e38">01207</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="l01208"></a>01208 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a8eb84be4b5cc91731c16be4f32f5bf3d" title="Get the status of pending operations.">Socket::isPending</a>(<a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8a0c9ffb2c87eb616774ea812fc9739efd">Socket::pendingOutput</a>, timeout);}; <a name="l01209"></a>01209 <a name="l01210"></a>01210 <a name="l01211"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#a04ebd34e6cfc70146bfe3789c31d8903">01211</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setRouting(<span class="keywordtype">bool</span> enable) <a name="l01212"></a>01212 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a2165fdf85e39e6a8aaff3da889ae7e20" title="Set the socket routing to indicate if outgoing messages should bypass normal routing...">Socket::setRouting</a>(enable);}; <a name="l01213"></a>01213 <a name="l01214"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#a11c5788901bb8c18af8428efe9c54145">01214</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setTypeOfService(<a class="code" href="classost_1_1_socket.html#a258f81f5a42d051242f0f49f8192f890">Tos</a> tos) <a name="l01215"></a>01215 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#ae49df7e3c3913147116d8491f77a1b63" title="Set packet scheduling on platforms which support ip quality of service conventions...">Socket::setTypeOfService</a>(tos);}; <a name="l01216"></a>01216 <a name="l01217"></a><a class="code" href="classost_1_1_u_d_p_transmit.html#a86e9e41d05629a5e6f3029ace0d55e38">01217</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setBroadcast(<span class="keywordtype">bool</span> enable) <a name="l01218"></a>01218 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a1a507041ee5741bcdc906707b1735781" title="Set the subnet broadcast flag for the socket.">Socket::setBroadcast</a>(enable);}; <a name="l01219"></a>01219 }; <a name="l01220"></a>01220 <a name="l01229"></a><a class="code" href="classost_1_1_u_d_p_receive.html">01229</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_u_d_p_receive.html" title="Representing half of a two-way UDP connection, the UDP receiver can receive data...">UDPReceive</a> : <span class="keyword">protected</span> <a class="code" href="classost_1_1_u_d_p_socket.html" title="UDP sockets implement the TCP SOCK_DGRAM UDP protocol.">UDPSocket</a> <a name="l01230"></a>01230 { <a name="l01231"></a>01231 <span class="keyword">protected</span>: <a name="l01242"></a>01242 <a class="code" href="classost_1_1_u_d_p_receive.html" title="Representing half of a two-way UDP connection, the UDP receiver can receive data...">UDPReceive</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html" title="The network name and address objects are all derived from a common IPV4Address base...">IPV4Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01243"></a>01243 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01244"></a>01244 <span class="preprocessor"></span> <a class="code" href="classost_1_1_u_d_p_receive.html" title="Representing half of a two-way UDP connection, the UDP receiver can receive data...">UDPReceive</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html" title="The network name and address objects are all derived from a common IPV6Address base...">IPV6Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01245"></a>01245 <span class="preprocessor">#endif</span> <a name="l01246"></a>01246 <span class="preprocessor"></span> <a name="l01256"></a>01256 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01257"></a>01257 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01258"></a>01258 <span class="preprocessor"></span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01259"></a>01259 <span class="preprocessor">#endif</span> <a name="l01260"></a>01260 <span class="preprocessor"></span> <a name="l01267"></a><a class="code" href="classost_1_1_u_d_p_receive.html#af5beaaf3d4941735b8784c1c1bc0ea99">01267</a> <span class="keywordtype">bool</span> isPendingReceive(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout) <a name="l01268"></a>01268 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a8eb84be4b5cc91731c16be4f32f5bf3d" title="Get the status of pending operations.">Socket::isPending</a>(<a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8af2d41647f208c78eb97fe77196c55ccc">Socket::pendingInput</a>, timeout);}; <a name="l01269"></a>01269 <a name="l01273"></a><a class="code" href="classost_1_1_u_d_p_receive.html#aee5e39bfbba0ba9cbfb616b0df254bcd">01273</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> endReceiver(<span class="keywordtype">void</span>) <a name="l01274"></a>01274 {<a class="code" href="classost_1_1_socket.html#a3ab340e773f0214eefcf66f588bcf174" title="Used as the default destructor for ending a socket.">Socket::endSocket</a>();} <a name="l01275"></a>01275 <a name="l01276"></a><a class="code" href="classost_1_1_u_d_p_receive.html#aab58fbd159ce6d8c3f539038196a0d11">01276</a> <span class="keyword">inline</span> <a class="code" href="socket_8h.html#a8dc8083897335125630f1af5dafd5831">SOCKET</a> getReceiver(<span class="keywordtype">void</span>)<span class="keyword"> const</span> <a name="l01277"></a>01277 <span class="keyword"> </span>{<span class="keywordflow">return</span> so;}; <a name="l01278"></a>01278 <a name="l01279"></a><a class="code" href="classost_1_1_u_d_p_receive.html#ae28ec2a16ac42d1a14f015ca5daa260f">01279</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setRouting(<span class="keywordtype">bool</span> enable) <a name="l01280"></a>01280 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a2165fdf85e39e6a8aaff3da889ae7e20" title="Set the socket routing to indicate if outgoing messages should bypass normal routing...">Socket::setRouting</a>(enable);} <a name="l01281"></a>01281 <a name="l01282"></a><a class="code" href="classost_1_1_u_d_p_receive.html#aa513f9513f012494e0fbd61d84c665f6">01282</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> setMulticast(<span class="keywordtype">bool</span> enable) <a name="l01283"></a>01283 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a09b396c3fc7316061a3f0539e918a43f" title="Setting multicast binds the multicast interface used for the socket to the interface...">Socket::setMulticastByFamily</a>(enable, family);} <a name="l01284"></a>01284 <a name="l01285"></a><a class="code" href="classost_1_1_u_d_p_receive.html#a29df9040b68e4e6b99a03827d7e112c8">01285</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> join(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html" title="A specialization of IPV4Address that provides address validation for multicast addresses...">IPV4Multicast</a> &ia) <a name="l01286"></a>01286 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#afb0e2d234f461ce45711bff52ffc96ad" title="Join a multicast group.">Socket::join</a>(ia);} <a name="l01287"></a>01287 <a name="l01288"></a>01288 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01289"></a><a class="code" href="classost_1_1_u_d_p_receive.html#a3d1491c118a0609aa6f67aed9a7a5103">01289</a> <span class="preprocessor"></span> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> join(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_multicast.html" title="A specialization of IPV6Address that provides address validation for multicast addresses...">IPV6Multicast</a> &ia) <a name="l01290"></a>01290 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#afb0e2d234f461ce45711bff52ffc96ad" title="Join a multicast group.">Socket::join</a>(ia);} <a name="l01291"></a>01291 <span class="preprocessor">#endif</span> <a name="l01292"></a>01292 <span class="preprocessor"></span> <a name="l01293"></a><a class="code" href="classost_1_1_u_d_p_receive.html#a6ec872d42da02ac13e3390f4ec6cb98d">01293</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> drop(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_multicast.html" title="A specialization of IPV4Address that provides address validation for multicast addresses...">IPV4Multicast</a> &ia) <a name="l01294"></a>01294 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#ac59c08e11070a1602352da5c54332d9e" title="Drop membership from a multicast group.">Socket::drop</a>(ia);} <a name="l01295"></a>01295 <a name="l01296"></a>01296 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01297"></a><a class="code" href="classost_1_1_u_d_p_receive.html#a4fb379f4df763e3726c8097d65d4c584">01297</a> <span class="preprocessor"></span> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> drop(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_multicast.html" title="A specialization of IPV6Address that provides address validation for multicast addresses...">IPV6Multicast</a> &ia) <a name="l01298"></a>01298 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#ac59c08e11070a1602352da5c54332d9e" title="Drop membership from a multicast group.">Socket::drop</a>(ia);} <a name="l01299"></a>01299 <span class="preprocessor">#endif</span> <a name="l01300"></a>01300 <span class="preprocessor"></span> <a name="l01301"></a>01301 <span class="keyword">public</span>: <a name="l01309"></a><a class="code" href="classost_1_1_u_d_p_receive.html#a39f5e896422f2f3dda0948f265b8b013">01309</a> <span class="keyword">inline</span> ssize_t receive(<span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> len) <a name="l01310"></a>01310 {<span class="keywordflow">return</span> _IORET64 ::recv(so, (<span class="keywordtype">char</span> *)buf, _IOLEN64 len, 0);}; <a name="l01311"></a>01311 <a name="l01318"></a><a class="code" href="classost_1_1_u_d_p_receive.html#a3a63f4aa241374a3550201eaf92c134a">01318</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isInputReady(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#a74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>) <a name="l01319"></a>01319 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a8eb84be4b5cc91731c16be4f32f5bf3d" title="Get the status of pending operations.">Socket::isPending</a>(<a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8af2d41647f208c78eb97fe77196c55ccc">Socket::pendingInput</a>, timeout);}; <a name="l01320"></a>01320 }; <a name="l01321"></a>01321 <a name="l01332"></a><a class="code" href="classost_1_1_u_d_p_duplex.html">01332</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_u_d_p_duplex.html" title="UDP duplex connections impliment a bi-directional point-to-point UDP session between...">UDPDuplex</a> : <span class="keyword">public</span> <a class="code" href="classost_1_1_u_d_p_transmit.html" title="Representing half of a two-way UDP connection, the UDP transmitter can broadcast...">UDPTransmit</a>, <span class="keyword">public</span> <a class="code" href="classost_1_1_u_d_p_receive.html" title="Representing half of a two-way UDP connection, the UDP receiver can receive data...">UDPReceive</a> <a name="l01333"></a>01333 { <a name="l01334"></a>01334 <span class="keyword">public</span>: <a name="l01342"></a>01342 <a class="code" href="classost_1_1_u_d_p_duplex.html" title="UDP duplex connections impliment a bi-directional point-to-point UDP session between...">UDPDuplex</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html" title="The network name and address objects are all derived from a common IPV4Address base...">IPV4Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01343"></a>01343 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01344"></a>01344 <span class="preprocessor"></span> <a class="code" href="classost_1_1_u_d_p_duplex.html" title="UDP duplex connections impliment a bi-directional point-to-point UDP session between...">UDPDuplex</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html" title="The network name and address objects are all derived from a common IPV6Address base...">IPV6Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01345"></a>01345 <span class="preprocessor">#endif</span> <a name="l01346"></a>01346 <span class="preprocessor"></span> <a name="l01356"></a>01356 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01357"></a>01357 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01358"></a>01358 <span class="preprocessor"></span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01359"></a>01359 <span class="preprocessor">#endif</span> <a name="l01360"></a>01360 <span class="preprocessor"></span> <a name="l01367"></a>01367 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Error</a> disconnect(<span class="keywordtype">void</span>); <a name="l01368"></a>01368 }; <a name="l01369"></a>01369 <a name="l01370"></a>01370 <a name="l01395"></a><a class="code" href="classost_1_1_t_c_p_socket.html">01395</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_t_c_p_socket.html" title="TCP sockets are used for stream based connected sessions between two sockets.">TCPSocket</a> : <span class="keyword">protected</span> <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a> <a name="l01396"></a>01396 { <a name="l01397"></a>01397 <span class="keyword">protected</span>: <a name="l01398"></a><a class="code" href="classost_1_1_t_c_p_socket.html#a926afdde97f8074cfe21a6c0d23830ed">01398</a> <span class="keywordtype">int</span> segsize; <a name="l01399"></a>01399 <span class="keywordtype">void</span> setSegmentSize(<span class="keywordtype">unsigned</span> mss); <a name="l01400"></a>01400 <a name="l01401"></a>01401 <span class="keyword">public</span>: <a name="l01413"></a>01413 <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" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &ia, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01414"></a>01414 <a name="l01418"></a><a class="code" href="classost_1_1_t_c_p_socket.html#a58d0e49f75856b2e888e9ac894c489a2">01418</a> <span class="keyword">inline</span> <a class="code" href="socket_8h.html#a8dc8083897335125630f1af5dafd5831">SOCKET</a> getSocket(<span class="keywordtype">void</span>) <a name="l01419"></a>01419 {<span class="keywordflow">return</span> so;}; <a name="l01420"></a>01420 <a name="l01424"></a><a class="code" href="classost_1_1_t_c_p_socket.html#ae25df03dd4c3abd8da25e20a59ffbc62">01424</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> getSegmentSize(<span class="keywordtype">void</span>) <a name="l01425"></a>01425 {<span class="keywordflow">return</span> segsize;}; <a name="l01426"></a>01426 <a name="l01439"></a>01439 <a class="code" href="classost_1_1_t_c_p_socket.html" title="TCP sockets are used for stream based connected sessions between two sockets.">TCPSocket</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_address.html" title="The network name and address objects are all derived from a common IPV4Address base...">IPV4Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <span class="keywordtype">unsigned</span> backlog = 5, <span class="keywordtype">unsigned</span> mss = 536); <a name="l01440"></a>01440 <a name="l01451"></a>01451 <a class="code" href="classost_1_1_t_c_p_socket.html" title="TCP sockets are used for stream based connected sessions between two sockets.">TCPSocket</a>(<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="l01452"></a>01452 <a name="l01461"></a><a class="code" href="classost_1_1_t_c_p_socket.html#abb20f4723de2e9641528d9c82f9389d1">01461</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getRequest(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l01462"></a>01462 <span class="keyword"> </span>{<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a68a7acd6af1686e66e88e9e466a9903f" title="May be used to examine the origin of data waiting in the socket receive queue.">Socket::getIPV4Sender</a>(port);} <a name="l01463"></a>01463 <a name="l01467"></a>01467 <span class="keywordtype">void</span> reject(<span class="keywordtype">void</span>); <a name="l01468"></a>01468 <a name="l01472"></a><a class="code" href="classost_1_1_t_c_p_socket.html#aa0779bf0973ae5b54a5f323ef62ab4ae">01472</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getLocal(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l01473"></a>01473 <span class="keyword"> </span>{<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#af72396adf4cac5113e722447e48b7916" title="Get the local address and port number this socket is currently bound to.">Socket::getIPV4Local</a>(port);} <a name="l01474"></a>01474 <a name="l01480"></a><a class="code" href="classost_1_1_t_c_p_socket.html#a112e8235b317f15e15f6ea264fe81eb7">01480</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isPendingConnection(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#a74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>) <span class="comment">/* not const -- jfc */</span> <a name="l01481"></a>01481 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a8eb84be4b5cc91731c16be4f32f5bf3d" title="Get the status of pending operations.">Socket::isPending</a>(<a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8af2d41647f208c78eb97fe77196c55ccc">Socket::pendingInput</a>, timeout);} <a name="l01482"></a>01482 <a name="l01486"></a>01486 <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_t_c_p_socket.html" title="TCP sockets are used for stream based connected sessions between two sockets.">TCPSocket</a>(); <a name="l01487"></a>01487 }; <a name="l01488"></a>01488 <a name="l01489"></a>01489 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01490"></a>01490 <span class="preprocessor"></span> <a name="l01514"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html">01514</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_t_c_p_v6_socket.html" title="TCPV6 sockets are used for stream based connected sessions between two ipv6 sockets...">TCPV6Socket</a> : <span class="keyword">protected</span> <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a> <a name="l01515"></a>01515 { <a name="l01516"></a>01516 <span class="keyword">private</span>: <a name="l01517"></a>01517 <span class="keywordtype">int</span> segsize; <a name="l01518"></a>01518 <span class="keywordtype">void</span> setSegmentSize(<span class="keywordtype">unsigned</span> mss); <a name="l01519"></a>01519 <a name="l01520"></a>01520 <span class="keyword">public</span>: <a name="l01532"></a>01532 <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" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> &ia, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port); <a name="l01533"></a>01533 <a name="l01537"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html#acede992ad26a20072d38716d44f243dc">01537</a> <span class="keyword">inline</span> <a class="code" href="socket_8h.html#a8dc8083897335125630f1af5dafd5831">SOCKET</a> getSocket(<span class="keywordtype">void</span>) <a name="l01538"></a>01538 {<span class="keywordflow">return</span> so;}; <a name="l01539"></a>01539 <a name="l01540"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html#a8381cf05daeccc8f78c56a2e1cf33370">01540</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> getSegmentSize(<span class="keywordtype">void</span>) <a name="l01541"></a>01541 {<span class="keywordflow">return</span> segsize;}; <a name="l01542"></a>01542 <a name="l01555"></a>01555 <a class="code" href="classost_1_1_t_c_p_v6_socket.html" title="TCPV6 sockets are used for stream based connected sessions between two ipv6 sockets...">TCPV6Socket</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_address.html" title="The network name and address objects are all derived from a common IPV6Address base...">IPV6Address</a> &bind, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <span class="keywordtype">unsigned</span> backlog = 5, <span class="keywordtype">unsigned</span> mss = 536); <a name="l01556"></a>01556 <a name="l01567"></a>01567 <a class="code" href="classost_1_1_t_c_p_v6_socket.html" title="TCPV6 sockets are used for stream based connected sessions between two ipv6 sockets...">TCPV6Socket</a>(<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="l01568"></a>01568 <a name="l01577"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html#a2afe9be7e5c2390b5d6cf5c18c705a9c">01577</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> getRequest(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l01578"></a>01578 <span class="keyword"> </span>{<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a4f1e7645a2d543e0a665b111c2dba8e9">Socket::getIPV6Sender</a>(port);} <a name="l01579"></a>01579 <a name="l01583"></a>01583 <span class="keywordtype">void</span> reject(<span class="keywordtype">void</span>); <a name="l01584"></a>01584 <a name="l01588"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html#ac886cc40d05790837f9a52bde00c6170">01588</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> getLocal(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port = NULL)<span class="keyword"> const</span> <a name="l01589"></a>01589 <span class="keyword"> </span>{<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a8410324ca8ddf50751830f59afeaf377">Socket::getIPV6Local</a>(port);} <a name="l01590"></a>01590 <a name="l01596"></a><a class="code" href="classost_1_1_t_c_p_v6_socket.html#a490ee599f8bdb269f359f33cc7862845">01596</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isPendingConnection(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#a74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>) <span class="comment">/* not const -- jfc */</span> <a name="l01597"></a>01597 {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_socket.html#a8eb84be4b5cc91731c16be4f32f5bf3d" title="Get the status of pending operations.">Socket::isPending</a>(<a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8af2d41647f208c78eb97fe77196c55ccc">Socket::pendingInput</a>, timeout);} <a name="l01598"></a>01598 <a name="l01602"></a>01602 <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_t_c_p_v6_socket.html" title="TCPV6 sockets are used for stream based connected sessions between two ipv6 sockets...">TCPV6Socket</a>(); <a name="l01603"></a>01603 }; <a name="l01604"></a>01604 <a name="l01605"></a>01605 <span class="preprocessor">#endif</span> <a name="l01606"></a>01606 <span class="preprocessor"></span> <a name="l01607"></a>01607 <span class="comment">/*</span> <a name="l01608"></a>01608 <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="l01609"></a>01609 <span class="comment"> c:\program files\microsoft visual studio\vc98\include\streamb.h(69) : see declaration of 'streambuf'</span> <a name="l01610"></a>01610 <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="l01611"></a>01611 <span class="comment"> c:\program files\microsoft visual studio\vc98\include\iostream.h(66) : see declaration of 'iostream'</span> <a name="l01612"></a>01612 <span class="comment">*/</span> <a name="l01613"></a>01613 <a name="l01614"></a>01614 <span class="preprocessor">#ifdef _MSC_VER</span> <a name="l01615"></a>01615 <span class="preprocessor"></span><span class="preprocessor">#pragma warning(disable:4275) // disable C4275 warning</span> <a name="l01616"></a>01616 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l01617"></a>01617 <span class="preprocessor"></span> <a name="l01631"></a><a class="code" href="classost_1_1_t_c_p_stream.html">01631</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a> : <span class="keyword">protected</span> std::streambuf, <span class="keyword">public</span> <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a>, <span class="keyword">public</span> std::iostream <a name="l01632"></a>01632 { <a name="l01633"></a>01633 <span class="keyword">private</span>: <a name="l01634"></a>01634 <span class="keywordtype">int</span> doallocate(); <a name="l01635"></a>01635 <a name="l01636"></a>01636 <span class="keywordtype">void</span> segmentBuffering(<span class="keywordtype">unsigned</span> mss); <a name="l01637"></a>01637 <a name="l01638"></a>01638 <span class="keyword">friend</span> <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>& crlf(<a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>&); <a name="l01639"></a>01639 <span class="keyword">friend</span> <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>& lfcr(<a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>&); <a name="l01640"></a>01640 <a name="l01641"></a>01641 <span class="keyword">protected</span>: <a name="l01642"></a><a class="code" href="classost_1_1_t_c_p_stream.html#ae223ae380e2dc9d2e64cde0a577eccf2">01642</a> <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout; <a name="l01643"></a><a class="code" href="classost_1_1_t_c_p_stream.html#a1eb7fe5844a5c0a5708d658187e9839b">01643</a> <span class="keywordtype">size_t</span> bufsize; <a name="l01644"></a><a class="code" href="classost_1_1_t_c_p_stream.html#aecc5f6b34232ba0fef048f53fdaa51fc">01644</a> Family family; <a name="l01645"></a><a class="code" href="classost_1_1_t_c_p_stream.html#afe373d1dd6090f4627e2361ff3a4fcdd">01645</a> <span class="keywordtype">char</span> *gbuf, *pbuf; <a name="l01646"></a>01646 <a name="l01647"></a>01647 <span class="keyword">public</span>: <a name="l01652"></a>01652 <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>(Family family = IPV4, <span class="keywordtype">bool</span> throwflag = <span class="keyword">true</span>, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> to = 0); <a name="l01653"></a>01653 <a name="l01657"></a>01657 <span class="keywordtype">void</span> disconnect(<span class="keywordtype">void</span>); <a name="l01658"></a>01658 <a name="l01662"></a>01662 <span class="keywordtype">int</span> getSegmentSize(<span class="keywordtype">void</span>); <a name="l01663"></a>01663 <a name="l01664"></a>01664 <span class="keyword">protected</span>: <a name="l01671"></a>01671 <span class="keywordtype">void</span> allocate(<span class="keywordtype">size_t</span> size); <a name="l01672"></a>01672 <a name="l01677"></a>01677 <span class="keywordtype">void</span> endStream(<span class="keywordtype">void</span>); <a name="l01678"></a>01678 <a name="l01685"></a>01685 <span class="keywordtype">int</span> underflow(); <a name="l01686"></a>01686 <a name="l01695"></a>01695 <span class="keywordtype">int</span> uflow(); <a name="l01696"></a>01696 <a name="l01704"></a>01704 <span class="keywordtype">int</span> overflow(<span class="keywordtype">int</span> ch); <a name="l01705"></a>01705 <a name="l01714"></a>01714 <span class="keywordtype">void</span> connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <span class="keywordtype">unsigned</span> mss = 536); <a name="l01715"></a>01715 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01716"></a>01716 <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" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <span class="keywordtype">unsigned</span> mss = 536); <a name="l01717"></a>01717 <span class="preprocessor">#endif</span> <a name="l01718"></a>01718 <span class="preprocessor"></span> <a name="l01726"></a>01726 <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="l01727"></a>01727 <a name="l01735"></a><a class="code" href="classost_1_1_t_c_p_stream.html#a5191b9c6d7c2369f96f236ae78b25452">01735</a> std::iostream *tcp(<span class="keywordtype">void</span>) <a name="l01736"></a>01736 {<span class="keywordflow">return</span> ((std::iostream *)<span class="keyword">this</span>);}; <a name="l01737"></a>01737 <a name="l01738"></a>01738 <span class="keyword">public</span>: <a name="l01748"></a>01748 <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>(<a class="code" href="classost_1_1_t_c_p_socket.html" title="TCP sockets are used for stream based connected sessions between two sockets.">TCPSocket</a> &server, <span class="keywordtype">bool</span> throwflag = <span class="keyword">true</span>, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l01749"></a>01749 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01750"></a>01750 <span class="preprocessor"></span> <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>(<a class="code" href="classost_1_1_t_c_p_v6_socket.html" title="TCPV6 sockets are used for stream based connected sessions between two ipv6 sockets...">TCPV6Socket</a> &server, <span class="keywordtype">bool</span> throwflag = <span class="keyword">true</span>, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l01751"></a>01751 <span class="preprocessor">#endif</span> <a name="l01752"></a>01752 <span class="preprocessor"></span> <a name="l01758"></a>01758 <span class="keywordtype">void</span> connect(<a class="code" href="classost_1_1_t_c_p_socket.html" title="TCP sockets are used for stream based connected sessions between two sockets.">TCPSocket</a> &server); <a name="l01759"></a>01759 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01760"></a>01760 <span class="preprocessor"></span> <span class="keywordtype">void</span> connect(<a class="code" href="classost_1_1_t_c_p_v6_socket.html" title="TCPV6 sockets are used for stream based connected sessions between two ipv6 sockets...">TCPV6Socket</a> &server); <a name="l01761"></a>01761 <span class="preprocessor">#endif</span> <a name="l01762"></a>01762 <span class="preprocessor"></span> <a name="l01773"></a>01773 <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">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#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l01774"></a>01774 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01775"></a>01775 <span class="preprocessor"></span> <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">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#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l01776"></a>01776 <span class="preprocessor">#endif</span> <a name="l01777"></a>01777 <span class="preprocessor"></span> <a name="l01787"></a>01787 <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>(<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#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer = 0); <a name="l01788"></a>01788 <a name="l01794"></a><a class="code" href="classost_1_1_t_c_p_stream.html#a1bdf8e7962c57d6086117d5a790ad3f6">01794</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> setTimeout(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer) <a name="l01795"></a>01795 {timeout = timer;}; <a name="l01796"></a>01796 <a name="l01803"></a>01803 <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a> &source); <a name="l01804"></a>01804 <a name="l01809"></a>01809 <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a>(); <a name="l01810"></a>01810 <a name="l01817"></a>01817 <span class="keywordtype">int</span> sync(<span class="keywordtype">void</span>); <a name="l01818"></a>01818 <a name="l01819"></a>01819 <span class="preprocessor">#ifdef HAVE_SNPRINTF</span> <a name="l01820"></a>01820 <span class="preprocessor"></span> <a name="l01826"></a>01826 <span class="keywordtype">size_t</span> printf(<span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...); <a name="l01827"></a>01827 <span class="preprocessor">#endif</span> <a name="l01828"></a>01828 <span class="preprocessor"></span> <a name="l01836"></a>01836 <span class="keywordtype">bool</span> isPending(Pending pend, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#a74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>); <a name="l01837"></a>01837 <a name="l01845"></a><a class="code" href="classost_1_1_t_c_p_stream.html#a0150df4f03d32e200b22d0f06404ac39">01845</a> <span class="keyword">inline</span> ssize_t peek(<span class="keywordtype">void</span> *buf, <span class="keywordtype">size_t</span> len) <a name="l01846"></a>01846 {<span class="keywordflow">return</span> _IORET64 ::recv(so, (<span class="keywordtype">char</span> *)buf, _IOLEN64 len, MSG_PEEK);}; <a name="l01847"></a>01847 <a name="l01853"></a><a class="code" href="classost_1_1_t_c_p_stream.html#a0d016d7c968dcfcb0d3e15e759af4c5f">01853</a> <span class="keyword">inline</span> <span class="keywordtype">size_t</span> getBufferSize(<span class="keywordtype">void</span>)<span class="keyword"> const</span> <a name="l01854"></a>01854 <span class="keyword"> </span>{<span class="keywordflow">return</span> bufsize;}; <a name="l01855"></a>01855 }; <a name="l01856"></a>01856 <a name="l01867"></a><a class="code" href="classost_1_1_t_c_p_session.html">01867</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_t_c_p_session.html" title="The TCP session is used to primarily to represent a client connection that can be...">TCPSession</a> : <span class="keyword">public</span> <a class="code" href="classost_1_1_thread.html" title="Every thread of execution in an application is created by instantiating an object...">Thread</a>, <span class="keyword">public</span> <a class="code" href="classost_1_1_t_c_p_stream.html" title="TCP streams are used to represent TCP client connections to a server by TCP protocol...">TCPStream</a> <a name="l01868"></a>01868 { <a name="l01869"></a>01869 <span class="keyword">private</span>: <a name="l01870"></a>01870 <a class="code" href="classost_1_1_t_c_p_session.html" title="The TCP session is used to primarily to represent a client connection that can be...">TCPSession</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_t_c_p_session.html" title="The TCP session is used to primarily to represent a client connection that can be...">TCPSession</a> &rhs); <span class="comment">// not defined</span> <a name="l01871"></a>01871 <span class="keyword">protected</span>: <a name="l01884"></a>01884 <span class="keywordtype">int</span> waitConnection(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#a74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>); <a name="l01885"></a>01885 <a name="l01892"></a>01892 <span class="keywordtype">void</span> initial(<span class="keywordtype">void</span>); <a name="l01893"></a>01893 <a name="l01894"></a>01894 <span class="keyword">public</span>: <a name="l01905"></a>01905 <a class="code" href="classost_1_1_t_c_p_session.html" title="The TCP session is used to primarily to represent a client connection that can be...">TCPSession</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &host, <a name="l01906"></a>01906 <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <span class="keywordtype">size_t</span> size = 536, <span class="keywordtype">int</span> pri = 0, <span class="keywordtype">size_t</span> stack = 0); <a name="l01907"></a>01907 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01908"></a>01908 <span class="preprocessor"></span> <a class="code" href="classost_1_1_t_c_p_session.html" title="The TCP session is used to primarily to represent a client connection that can be...">TCPSession</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v6_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV6Host</a> &host, <a name="l01909"></a>01909 <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <span class="keywordtype">size_t</span> size = 536, <span class="keywordtype">int</span> pri = 0, <span class="keywordtype">size_t</span> stack = 0); <a name="l01910"></a>01910 <span class="preprocessor">#endif</span> <a name="l01911"></a>01911 <span class="preprocessor"></span> <a name="l01921"></a>01921 <a class="code" href="classost_1_1_t_c_p_session.html" title="The TCP session is used to primarily to represent a client connection that can be...">TCPSession</a>(<a class="code" href="classost_1_1_t_c_p_socket.html" title="TCP sockets are used for stream based connected sessions between two sockets.">TCPSocket</a> &server, <span class="keywordtype">int</span> pri = 0, <span class="keywordtype">size_t</span> stack = 0); <a name="l01922"></a>01922 <span class="preprocessor">#ifdef CCXX_IPV6</span> <a name="l01923"></a>01923 <span class="preprocessor"></span> <a class="code" href="classost_1_1_t_c_p_session.html" title="The TCP session is used to primarily to represent a client connection that can be...">TCPSession</a>(<a class="code" href="classost_1_1_t_c_p_v6_socket.html" title="TCPV6 sockets are used for stream based connected sessions between two ipv6 sockets...">TCPV6Socket</a> &server, <span class="keywordtype">int</span> pri = 0, <span class="keywordtype">size_t</span> stack = 0); <a name="l01924"></a>01924 <span class="preprocessor">#endif</span> <a name="l01925"></a>01925 <span class="preprocessor"></span> <a name="l01929"></a>01929 <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_t_c_p_session.html" title="The TCP session is used to primarily to represent a client connection that can be...">TCPSession</a>(); <a name="l01930"></a>01930 }; <a name="l01931"></a>01931 <a name="l01932"></a>01932 <span class="preprocessor">#if defined(WIN32)</span> <a name="l01933"></a>01933 <span class="preprocessor"></span> <a name="l01943"></a>01943 <span class="keyword">class </span>init_WSA <a name="l01944"></a>01944 { <a name="l01945"></a>01945 <span class="keyword">public</span>: <a name="l01946"></a>01946 init_WSA(); <a name="l01947"></a>01947 ~init_WSA(); <a name="l01948"></a>01948 }; <a name="l01949"></a>01949 <a name="l01950"></a>01950 <span class="preprocessor">#endif // WIN32</span> <a name="l01951"></a>01951 <span class="preprocessor"></span> <a name="l01952"></a>01952 <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> SimpleTCPStream; <a name="l01953"></a>01953 <a name="l01965"></a><a class="code" href="classost_1_1_simple_t_c_p_stream.html">01965</a> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_simple_t_c_p_stream.html" title="Simple TCP Stream, to be used with Common C++ Library.">SimpleTCPStream</a> : <span class="keyword">public</span> <a class="code" href="classost_1_1_socket.html" title="The Socket is used as the base for all Internet protocol services under Common C++...">Socket</a> <a name="l01966"></a>01966 { <a name="l01967"></a>01967 <span class="keyword">private</span>: <a name="l01968"></a>01968 <a name="l01969"></a>01969 <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> getSender(<a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> *port) <span class="keyword">const</span>; <a name="l01970"></a>01970 <a name="l01971"></a>01971 <span class="keyword">protected</span>: <a name="l01976"></a>01976 <a class="code" href="classost_1_1_simple_t_c_p_stream.html" title="Simple TCP Stream, to be used with Common C++ Library.">SimpleTCPStream</a>(); <a name="l01977"></a>01977 <a name="l01982"></a>01982 <span class="keywordtype">void</span> endStream(<span class="keywordtype">void</span>); <a name="l01983"></a>01983 <a name="l01992"></a>01992 <span class="keywordtype">void</span> Connect(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <span class="keywordtype">size_t</span> size); <a name="l01993"></a>01993 <a name="l01994"></a>01994 <a name="l01995"></a>01995 <span class="keyword">public</span>: <a name="l02004"></a>02004 <a class="code" href="classost_1_1_simple_t_c_p_stream.html" title="Simple TCP Stream, to be used with Common C++ Library.">SimpleTCPStream</a>(<a class="code" href="classost_1_1_t_c_p_socket.html" title="TCP sockets are used for stream based connected sessions between two sockets.">TCPSocket</a> &server, <span class="keywordtype">size_t</span> size = 512); <a name="l02005"></a>02005 <a name="l02014"></a>02014 <a class="code" href="classost_1_1_simple_t_c_p_stream.html" title="Simple TCP Stream, to be used with Common C++ Library.">SimpleTCPStream</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_i_p_v4_host.html" title="This object is used to hold the actual and valid internet address of a specific host...">IPV4Host</a> &host, <a class="code" href="namespaceost.html#a3c74a1a40c359fd349f3e3e1b96ebfc7" title="Transport Protocol Ports.">tpport_t</a> port, <span class="keywordtype">size_t</span> size = 512); <a name="l02015"></a>02015 <a name="l02021"></a>02021 <a class="code" href="classost_1_1_simple_t_c_p_stream.html" title="Simple TCP Stream, to be used with Common C++ Library.">SimpleTCPStream</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_simple_t_c_p_stream.html" title="Simple TCP Stream, to be used with Common C++ Library.">SimpleTCPStream</a> &source); <a name="l02022"></a>02022 <a name="l02027"></a>02027 <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_simple_t_c_p_stream.html" title="Simple TCP Stream, to be used with Common C++ Library.">SimpleTCPStream</a>(); <a name="l02028"></a>02028 <a name="l02040"></a>02040 <span class="keywordtype">bool</span> isPending(<a class="code" href="classost_1_1_socket.html#a2cb9ccad21fc2f10c23e45cbb99bc6f8">Pending</a> pend, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = <a class="code" href="thread_8h.html#a74f2d4c747bce0b8f7f7c1f48e651876">TIMEOUT_INF</a>); <a name="l02041"></a>02041 <a name="l02042"></a><a class="code" href="classost_1_1_simple_t_c_p_stream.html#a50cdae078469b3876506ca4408f69705">02042</a> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_simple_t_c_p_stream.html#a50cdae078469b3876506ca4408f69705">flush</a>() {} <a name="l02043"></a>02043 <a name="l02055"></a>02055 ssize_t read(<span class="keywordtype">char</span> *bytes, <span class="keywordtype">size_t</span> length, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l02056"></a>02056 <a name="l02068"></a>02068 ssize_t write(<span class="keyword">const</span> <span class="keywordtype">char</span> *bytes, <span class="keywordtype">size_t</span> length, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l02069"></a>02069 <a name="l02083"></a>02083 ssize_t peek(<span class="keywordtype">char</span> *bytes, <span class="keywordtype">size_t</span> length, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0); <a name="l02084"></a>02084 <a name="l02085"></a>02085 }; <a name="l02086"></a>02086 <a name="l02087"></a>02087 <span class="preprocessor">#ifdef COMMON_STD_EXCEPTION</span> <a name="l02088"></a><a class="code" href="classost_1_1_sock_exception.html">02088</a> <span class="preprocessor"></span><span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_sock_exception.html">SockException</a> : <span class="keyword">public</span> <a class="code" href="classost_1_1_i_o_exception.html" title="A sub-hierarchy for all Common C++ I/O related classes.">IOException</a> <a name="l02089"></a>02089 { <a name="l02090"></a>02090 <span class="keyword">private</span>: <a name="l02091"></a>02091 <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Socket::Error</a> _socketError; <a name="l02092"></a>02092 <a name="l02093"></a>02093 <span class="keyword">public</span>: <a name="l02094"></a><a class="code" href="classost_1_1_sock_exception.html#ae6f6a13c4e1dca7ced6b0fd3c208e27a">02094</a> <a class="code" href="classost_1_1_sock_exception.html">SockException</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_string.html" title="This is a generic and portable string class.">String</a> &str, <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Socket::Error</a> socketError, <span class="keywordtype">long</span> systemError = 0) : <a name="l02095"></a>02095 <a class="code" href="classost_1_1_i_o_exception.html" title="A sub-hierarchy for all Common C++ I/O related classes.">IOException</a>(str, systemError), _socketError(socketError) {}; <a name="l02096"></a>02096 <a name="l02097"></a><a class="code" href="classost_1_1_sock_exception.html#a55c900c62198bf6591e17e5e5a1f2c20">02097</a> <span class="keyword">inline</span> <a class="code" href="classost_1_1_socket.html#ae056b6dd4f167163083b7ab602fd3f3f">Socket::Error</a> getSocketError()<span class="keyword"> const</span> <a name="l02098"></a>02098 <span class="keyword"> </span>{ <span class="keywordflow">return</span> _socketError; } <a name="l02099"></a>02099 }; <a name="l02100"></a>02100 <span class="preprocessor">#endif</span> <a name="l02101"></a>02101 <span class="preprocessor"></span> <a name="l02102"></a>02102 <span class="preprocessor">#ifdef CCXX_NAMESPACES</span> <a name="l02103"></a>02103 <span class="preprocessor"></span>} <a name="l02104"></a>02104 <span class="preprocessor">#endif</span> <a name="l02105"></a>02105 <span class="preprocessor"></span> <a name="l02106"></a>02106 <span class="preprocessor">#endif</span> <a name="l02107"></a>02107 <span class="preprocessor"></span> </pre></div></div> <hr class="footer"/><address style="text-align: right;"><small>Generated on Fri Mar 12 10:07:39 2010 for GNU CommonC++ by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address> </body> </html>