📄 socketft_8h-source.html
字号:
<a name="l00064"></a><a class="code" href="class_socket.html#2f22f22b934dc8c3b9a3dae68551f87e">00064</a> <a class="code" href="class_socket.html#2f22f22b934dc8c3b9a3dae68551f87e">operator socket_t</a>() {<span class="keywordflow">return</span> <a class="code" href="class_socket.html#2a82c6dd3794c4d45e33e68f2112df35">m_s</a>;}<a name="l00065"></a><a class="code" href="class_socket.html#fd9c1f7ef23c16a2c4290e1a0fccb142">00065</a> socket_t <a class="code" href="class_socket.html#fd9c1f7ef23c16a2c4290e1a0fccb142">GetSocket</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="class_socket.html#2a82c6dd3794c4d45e33e68f2112df35">m_s</a>;}<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="class_socket.html#02a47851259d4a225958441d1b4dd37a">AttachSocket</a>(socket_t s, <span class="keywordtype">bool</span> own=<span class="keyword">false</span>);<a name="l00067"></a>00067 socket_t <a class="code" href="class_socket.html#76ffdeb9e72db2f3212493e2f4d6e663">DetachSocket</a>();<a name="l00068"></a>00068 <span class="keywordtype">void</span> <a class="code" href="class_socket.html#5aa350ff51f6db7919316c94643acbf2">CloseSocket</a>();<a name="l00069"></a>00069 <a name="l00070"></a>00070 <span class="keywordtype">void</span> <a class="code" href="class_socket.html#262bc03b258ef9c5ab7afee5c078c29e">Create</a>(<span class="keywordtype">int</span> nType = SOCK_STREAM);<a name="l00071"></a>00071 <span class="keywordtype">void</span> <a class="code" href="class_socket.html#f73c8b8aa512e3ea0150b6d323b60700">Bind</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> port, <span class="keyword">const</span> <span class="keywordtype">char</span> *addr=NULL);<a name="l00072"></a>00072 <span class="keywordtype">void</span> <a class="code" href="class_socket.html#f73c8b8aa512e3ea0150b6d323b60700">Bind</a>(<span class="keyword">const</span> sockaddr* psa, socklen_t saLen);<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="class_socket.html#a0f96de45801e101b226a9954ae34d74">Listen</a>(<span class="keywordtype">int</span> backlog=5);<a name="l00074"></a>00074 <span class="comment">// the next three functions return false if the socket is in nonblocking mode</span><a name="l00075"></a>00075 <span class="comment">// and the operation cannot be completed immediately</span><a name="l00076"></a>00076 <span class="keywordtype">bool</span> <a class="code" href="class_socket.html#f6db2452bbe371340e748744e0600e43">Connect</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *addr, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> port);<a name="l00077"></a>00077 <span class="keywordtype">bool</span> <a class="code" href="class_socket.html#f6db2452bbe371340e748744e0600e43">Connect</a>(<span class="keyword">const</span> sockaddr* psa, socklen_t saLen);<a name="l00078"></a>00078 <span class="keywordtype">bool</span> <a class="code" href="class_socket.html#49b3cbb0430f638355a066566e243d3f">Accept</a>(<a class="code" href="class_socket.html" title="wrapper for Windows or Berkeley Sockets">Socket</a>& s, sockaddr *psa=NULL, socklen_t *psaLen=NULL);<a name="l00079"></a>00079 <span class="keywordtype">void</span> <a class="code" href="class_socket.html#eeee4469c3eeae609728e88113276545">GetSockName</a>(sockaddr *psa, socklen_t *psaLen);<a name="l00080"></a>00080 <span class="keywordtype">void</span> <a class="code" href="class_socket.html#abe0ad8b636dbb2f2d0fff8ab14df8a7">GetPeerName</a>(sockaddr *psa, socklen_t *psaLen);<a name="l00081"></a>00081 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_socket.html#3f0f142b8773be9129b4664686a00463">Send</a>(<span class="keyword">const</span> byte* buf, <span class="keywordtype">size_t</span> bufLen, <span class="keywordtype">int</span> flags=0);<a name="l00082"></a>00082 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_socket.html#70da2e36472cbdf892f9b53f61bf807e">Receive</a>(byte* buf, <span class="keywordtype">size_t</span> bufLen, <span class="keywordtype">int</span> flags=0);<a name="l00083"></a>00083 <span class="keywordtype">void</span> <a class="code" href="class_socket.html#44fa23c55391354e5ce763810048f534">ShutDown</a>(<span class="keywordtype">int</span> how = SD_SEND);<a name="l00084"></a>00084 <a name="l00085"></a>00085 <span class="keywordtype">void</span> <a class="code" href="class_socket.html#0b0126a0be1b112f59c7defab74e8230">IOCtl</a>(<span class="keywordtype">long</span> cmd, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *argp);<a name="l00086"></a>00086 <span class="keywordtype">bool</span> <a class="code" href="class_socket.html#5e36546ea37ec18ac0bdb5ae4ac8576b">SendReady</a>(<span class="keyword">const</span> timeval *timeout);<a name="l00087"></a>00087 <span class="keywordtype">bool</span> <a class="code" href="class_socket.html#e44e8895720eaada63131354415b6ba3">ReceiveReady</a>(<span class="keyword">const</span> timeval *timeout);<a name="l00088"></a>00088 <a name="l00089"></a>00089 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_socket.html#a2ef5204ea0d284b6ef003b06c3e6a2d">HandleError</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *operation) <span class="keyword">const</span>;<a name="l00090"></a><a class="code" href="class_socket.html#ebf290bcbd37f0711fcb56373b4f8f88">00090</a> <span class="keywordtype">void</span> <a class="code" href="class_socket.html#ebf290bcbd37f0711fcb56373b4f8f88">CheckAndHandleError_int</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *operation, <span class="keywordtype">int</span> result)<span class="keyword"> const</span><a name="l00091"></a>00091 <span class="keyword"> </span>{<span class="keywordflow">if</span> (result == SOCKET_ERROR) <a class="code" href="class_socket.html#a2ef5204ea0d284b6ef003b06c3e6a2d">HandleError</a>(operation);}<a name="l00092"></a><a class="code" href="class_socket.html#c29e3d5e0acd2d8d6c7fd59a7cc4bd40">00092</a> <span class="keywordtype">void</span> <a class="code" href="class_socket.html#c29e3d5e0acd2d8d6c7fd59a7cc4bd40">CheckAndHandleError</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *operation, socket_t result)<span class="keyword"> const</span><a name="l00093"></a>00093 <span class="keyword"> </span>{<span class="keywordflow">if</span> (result == SOCKET_ERROR) <a class="code" href="class_socket.html#a2ef5204ea0d284b6ef003b06c3e6a2d">HandleError</a>(operation);}<a name="l00094"></a>00094 <span class="preprocessor">#ifdef USE_WINDOWS_STYLE_SOCKETS</span><a name="l00095"></a><a class="code" href="class_socket.html#37bb892cc97ebe7ed68e8b2a9050e7e8">00095</a> <span class="preprocessor"></span> <span class="keywordtype">void</span> <a class="code" href="class_socket.html#c29e3d5e0acd2d8d6c7fd59a7cc4bd40">CheckAndHandleError</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *operation, BOOL result)<span class="keyword"> const</span><a name="l00096"></a>00096 <span class="keyword"> </span>{assert(result==TRUE || result==FALSE); <span class="keywordflow">if</span> (!result) <a class="code" href="class_socket.html#a2ef5204ea0d284b6ef003b06c3e6a2d">HandleError</a>(operation);}<a name="l00097"></a><a class="code" href="class_socket.html#749a04101f4e9232019788f5ed6e5ab8">00097</a> <span class="keywordtype">void</span> <a class="code" href="class_socket.html#c29e3d5e0acd2d8d6c7fd59a7cc4bd40">CheckAndHandleError</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *operation, <span class="keywordtype">bool</span> result)<span class="keyword"> const</span><a name="l00098"></a>00098 <span class="keyword"> </span>{<span class="keywordflow">if</span> (!result) <a class="code" href="class_socket.html#a2ef5204ea0d284b6ef003b06c3e6a2d">HandleError</a>(operation);}<a name="l00099"></a>00099 <span class="preprocessor">#endif</span><a name="l00100"></a>00100 <span class="preprocessor"></span><span class="comment"></span><a name="l00101"></a>00101 <span class="comment"> //! look up the port number given its name, returns 0 if not found</span><a name="l00102"></a>00102 <span class="comment"></span> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_socket.html#6417cdd4aec086457b67eb34d0964f57" title="look up the port number given its name, returns 0 if not found">PortNameToNumber</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">char</span> *protocol=<span class="stringliteral">"tcp"</span>);<span class="comment"></span><a name="l00103"></a>00103 <span class="comment"> //! start Windows Sockets 2</span><a name="l00104"></a>00104 <span class="comment"></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="class_socket.html#653d3bf891dceca75bee878574b98df3" title="start Windows Sockets 2">StartSockets</a>();<span class="comment"></span><a name="l00105"></a>00105 <span class="comment"> //! calls WSACleanup for Windows Sockets</span><a name="l00106"></a>00106 <span class="comment"></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="class_socket.html#078a98371080e50a230f6a4950e408c0" title="calls WSACleanup for Windows Sockets">ShutdownSockets</a>();<span class="comment"></span><a name="l00107"></a>00107 <span class="comment"> //! returns errno or WSAGetLastError</span><a name="l00108"></a>00108 <span class="comment"></span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="class_socket.html#9cf0d25a9da54bbe641dbb89bee452bc" title="returns errno or WSAGetLastError">GetLastError</a>();<span class="comment"></span><a name="l00109"></a>00109 <span class="comment"> //! sets errno or calls WSASetLastError</span><a name="l00110"></a>00110 <span class="comment"></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="class_socket.html#8c34f549b69c55bf0ee4c04ea8890bef" title="sets errno or calls WSASetLastError">SetLastError</a>(<span class="keywordtype">int</span> errorCode);<a name="l00111"></a>00111 <a name="l00112"></a>00112 <span class="keyword">protected</span>:<a name="l00113"></a><a class="code" href="class_socket.html#ffc033fc4e71e70f18532e9f280edf46">00113</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_socket.html#ffc033fc4e71e70f18532e9f280edf46">SocketChanged</a>() {}<a name="l00114"></a>00114 <a name="l00115"></a><a class="code" href="class_socket.html#2a82c6dd3794c4d45e33e68f2112df35">00115</a> socket_t <a class="code" href="class_socket.html#2a82c6dd3794c4d45e33e68f2112df35">m_s</a>;<a name="l00116"></a><a class="code" href="class_socket.html#e7427769bcbc6ee3ef44e223424fb535">00116</a> <span class="keywordtype">bool</span> <a class="code" href="class_socket.html#e7427769bcbc6ee3ef44e223424fb535">m_own</a>;<a name="l00117"></a>00117 };<a name="l00118"></a>00118 <a name="l00119"></a><a class="code" href="class_sockets_initializer.html">00119</a> <span class="keyword">class </span><a class="code" href="class_sockets_initializer.html">SocketsInitializer</a><a name="l00120"></a>00120 {<a name="l00121"></a>00121 <span class="keyword">public</span>:<a name="l00122"></a><a class="code" href="class_sockets_initializer.html#3c4956e6e87ad745ca7cd9f5afbe213e">00122</a> <a class="code" href="class_sockets_initializer.html#3c4956e6e87ad745ca7cd9f5afbe213e">SocketsInitializer</a>() {<a class="code" href="class_socket.html#653d3bf891dceca75bee878574b98df3" title="start Windows Sockets 2">Socket::StartSockets</a>();}<a name="l00123"></a><a class="code" href="class_sockets_initializer.html#91209a241892eef3b4420d6d6ac75c30">00123</a> <a class="code" href="class_sockets_initializer.html#91209a241892eef3b4420d6d6ac75c30">~SocketsInitializer</a>() {<span class="keywordflow">try</span> {<a class="code" href="class_socket.html#078a98371080e50a230f6a4950e408c0" title="calls WSACleanup for Windows Sockets">Socket::ShutdownSockets</a>();} <span class="keywordflow">catch</span> (...) {}}<a name="l00124"></a>00124 };<a name="l00125"></a>00125 <a name="l00126"></a><a class="code" href="class_socket_receiver.html">00126</a> <span class="keyword">class </span><a class="code" href="class_socket_receiver.html">SocketReceiver</a> : <span class="keyword">public</span> <a class="code" href="class_network_receiver.html" title="Network Receiver.">NetworkReceiver</a><a name="l00127"></a>00127 {<a name="l00128"></a>00128 <span class="keyword">public</span>:<a name="l00129"></a>00129 <a class="code" href="class_socket_receiver.html#05f59443fbdb49fe8696aa2fae78c9b2">SocketReceiver</a>(<a class="code" href="class_socket.html" title="wrapper for Windows or Berkeley Sockets">Socket</a> &s);<a name="l00130"></a>00130 <a name="l00131"></a>00131 <span class="preprocessor">#ifdef USE_BERKELEY_STYLE_SOCKETS</span><a name="l00132"></a>00132 <span class="preprocessor"></span> <span class="keywordtype">bool</span> <a class="code" href="class_network_receiver.html#27501ca6a36dae0cc344c57f413aea1d">MustWaitToReceive</a>() {<span class="keywordflow">return</span> <span class="keyword">true</span>;}<a name="l00133"></a>00133 <span class="preprocessor">#else</span><a name="l00134"></a>00134 <span class="preprocessor"></span> <a class="code" href="class_socket_receiver.html#3a58d69fa4b0afbda1184ad3cdfd3b0c">~SocketReceiver</a>();<a name="l00135"></a><a class="code" href="class_socket_receiver.html#3f98db48d5a5b205519c03a31220c000">00135</a> <span class="keywordtype">bool</span> <a class="code" href="class_socket_receiver.html#3f98db48d5a5b205519c03a31220c000">MustWaitForResult</a>() {<span class="keywordflow">return</span> <span class="keyword">true</span>;}<a name="l00136"></a>00136 <span class="preprocessor">#endif</span><a name="l00137"></a>00137 <span class="preprocessor"></span> <span class="keywordtype">bool</span> <a class="code" href="class_socket_receiver.html#31e0ccf504d9c16760051f10d749c034" title="receive data from network source, returns whether result is immediately available...">Receive</a>(byte* buf, <span class="keywordtype">size_t</span> bufLen);<a name="l00138"></a>00138 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_socket_receiver.html#428a62118c6e2ca975a3d4560668b3b2">GetReceiveResult</a>();<a name="l00139"></a><a class="code" href="class_socket_receiver.html#e815ba8ea618d832eeed81449d7a8474">00139</a> <span class="keywordtype">bool</span> <a class="code" href="class_socket_receiver.html#e815ba8ea618d832eeed81449d7a8474">EofReceived</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_eofReceived;}<a name="l00140"></a>00140 <a name="l00141"></a><a class="code" href="class_socket_receiver.html#8d566d018be0a0d8014c824366827b67">00141</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_socket_receiver.html#8d566d018be0a0d8014c824366827b67" title="maximum number of wait objects that this object can return">GetMaxWaitObjectCount</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> 1;}<a name="l00142"></a>00142 <span class="keywordtype">void</span> <a class="code" href="class_socket_receiver.html#a851a6020843d4311036a6f4299f9a6b" title="put wait objects into container">GetWaitObjects</a>(<a class="code" href="class_wait_object_container.html" title="container of wait objects">WaitObjectContainer</a> &container, <a class="code" href="class_call_stack.html">CallStack</a> <span class="keyword">const</span>& callStack);<a name="l00143"></a>00143 <a name="l00144"></a>00144 <span class="keyword">private</span>:<a name="l00145"></a>00145 <a class="code" href="class_socket.html" title="wrapper for Windows or Berkeley Sockets">Socket</a> &m_s;<a name="l00146"></a>00146 <span class="keywordtype">bool</span> m_eofReceived;<a name="l00147"></a>00147
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -