⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a00193.html

📁 UIP完整的协议栈
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<a name="l00253"></a>00253 <a class="code" href="a00142.html#g3d4c8bd4aada659eb34f5d2ffd3e7901">PT_THREAD</a>(psock_readto(<span class="keyword">struct</span> psock *psock, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c));<span class="comment"></span><a name="l00254"></a>00254 <span class="comment">/**</span><a name="l00255"></a>00255 <span class="comment"> * Read data up to a specified character.</span><a name="l00256"></a>00256 <span class="comment"> *</span><a name="l00257"></a>00257 <span class="comment"> * This macro will block waiting for data and read the data into the</span><a name="l00258"></a>00258 <span class="comment"> * input buffer specified with the call to PSOCK_INIT(). Data is only</span><a name="l00259"></a>00259 <span class="comment"> * read until the specifieed character appears in the data stream.</span><a name="l00260"></a>00260 <span class="comment"> *</span><a name="l00261"></a>00261 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket from which</span><a name="l00262"></a>00262 <span class="comment"> * data should be read.</span><a name="l00263"></a>00263 <span class="comment"> *</span><a name="l00264"></a>00264 <span class="comment"> * \param c (char) The character at which to stop reading.</span><a name="l00265"></a>00265 <span class="comment"> *</span><a name="l00266"></a>00266 <span class="comment"> * \hideinitializer</span><a name="l00267"></a>00267 <span class="comment"> */</span><a name="l00268"></a><a class="code" href="a00158.html#gb5d9c0becf7cb32d0aaef466839dd92e">00268</a> <span class="preprocessor">#define PSOCK_READTO(psock, c)                          \</span><a name="l00269"></a>00269 <span class="preprocessor">  PT_WAIT_THREAD(&amp;((psock)-&gt;pt), psock_readto(psock, c))</span><a name="l00270"></a>00270 <span class="preprocessor"></span><span class="comment"></span><a name="l00271"></a>00271 <span class="comment">/**</span><a name="l00272"></a>00272 <span class="comment"> * The length of the data that was previously read.</span><a name="l00273"></a>00273 <span class="comment"> *</span><a name="l00274"></a>00274 <span class="comment"> * This macro returns the length of the data that was previously read</span><a name="l00275"></a>00275 <span class="comment"> * using PSOCK_READTO() or PSOCK_READ().</span><a name="l00276"></a>00276 <span class="comment"> *</span><a name="l00277"></a>00277 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket holding the data.</span><a name="l00278"></a>00278 <span class="comment"> *</span><a name="l00279"></a>00279 <span class="comment"> * \hideinitializer</span><a name="l00280"></a>00280 <span class="comment"> */</span><a name="l00281"></a><a class="code" href="a00158.html#g4ab2de595d36e9e55dd61f6ecd139162">00281</a> <span class="preprocessor">#define PSOCK_DATALEN(psock) psock_datalen(psock)</span><a name="l00282"></a>00282 <span class="preprocessor"></span><a name="l00283"></a>00283 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00158.html#g3178402dd725776415bf9745e7bf92ba">psock_datalen</a>(<span class="keyword">struct</span> psock *psock);<a name="l00284"></a>00284 <span class="comment"></span><a name="l00285"></a>00285 <span class="comment">/**</span><a name="l00286"></a>00286 <span class="comment"> * Exit the protosocket's protothread.</span><a name="l00287"></a>00287 <span class="comment"> *</span><a name="l00288"></a>00288 <span class="comment"> * This macro terminates the protothread of the protosocket and should</span><a name="l00289"></a>00289 <span class="comment"> * almost always be used in conjunction with PSOCK_CLOSE().</span><a name="l00290"></a>00290 <span class="comment"> *</span><a name="l00291"></a>00291 <span class="comment"> * \sa PSOCK_CLOSE_EXIT()</span><a name="l00292"></a>00292 <span class="comment"> *</span><a name="l00293"></a>00293 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket.</span><a name="l00294"></a>00294 <span class="comment"> *</span><a name="l00295"></a>00295 <span class="comment"> * \hideinitializer</span><a name="l00296"></a>00296 <span class="comment"> */</span><a name="l00297"></a><a class="code" href="a00158.html#gfa11b2a1faf395ae2a6626e01c482d5d">00297</a> <span class="preprocessor">#define PSOCK_EXIT(psock) PT_EXIT(&amp;((psock)-&gt;pt))</span><a name="l00298"></a>00298 <span class="preprocessor"></span><span class="comment"></span><a name="l00299"></a>00299 <span class="comment">/**</span><a name="l00300"></a>00300 <span class="comment"> * Close a protosocket and exit the protosocket's protothread.</span><a name="l00301"></a>00301 <span class="comment"> *</span><a name="l00302"></a>00302 <span class="comment"> * This macro closes a protosocket and exits the protosocket's protothread.</span><a name="l00303"></a>00303 <span class="comment"> *</span><a name="l00304"></a>00304 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket.</span><a name="l00305"></a>00305 <span class="comment"> *</span><a name="l00306"></a>00306 <span class="comment"> * \hideinitializer</span><a name="l00307"></a>00307 <span class="comment"> */</span><a name="l00308"></a><a class="code" href="a00158.html#gc7cc1dba1819f7fcdaa9ff9eed5a08f4">00308</a> <span class="preprocessor">#define PSOCK_CLOSE_EXIT(psock)         \</span><a name="l00309"></a>00309 <span class="preprocessor">  do {                                          \</span><a name="l00310"></a>00310 <span class="preprocessor">    PSOCK_CLOSE(psock);                 \</span><a name="l00311"></a>00311 <span class="preprocessor">    PSOCK_EXIT(psock);                  \</span><a name="l00312"></a>00312 <span class="preprocessor">  } while(0)</span><a name="l00313"></a>00313 <span class="preprocessor"></span><span class="comment"></span><a name="l00314"></a>00314 <span class="comment">/**</span><a name="l00315"></a>00315 <span class="comment"> * Declare the end of a protosocket's protothread.</span><a name="l00316"></a>00316 <span class="comment"> *</span><a name="l00317"></a>00317 <span class="comment"> * This macro is used for declaring that the protosocket's protothread</span><a name="l00318"></a>00318 <span class="comment"> * ends. It must always be used together with a matching PSOCK_BEGIN()</span><a name="l00319"></a>00319 <span class="comment"> * macro.</span><a name="l00320"></a>00320 <span class="comment"> *</span><a name="l00321"></a>00321 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket.</span><a name="l00322"></a>00322 <span class="comment"> *</span><a name="l00323"></a>00323 <span class="comment"> * \hideinitializer</span><a name="l00324"></a>00324 <span class="comment"> */</span><a name="l00325"></a><a class="code" href="a00158.html#g4a264bb64ae706d53f572b1d9e4037a2">00325</a> <span class="preprocessor">#define PSOCK_END(psock) PT_END(&amp;((psock)-&gt;pt))</span><a name="l00326"></a>00326 <span class="preprocessor"></span><a name="l00327"></a>00327 <span class="keywordtype">char</span> <a class="code" href="a00158.html#g3b19f65e48079d8105be2a99b5b4b2ae">psock_newdata</a>(<span class="keyword">struct</span> psock *s);<a name="l00328"></a>00328 <span class="comment"></span><a name="l00329"></a>00329 <span class="comment">/**</span><a name="l00330"></a>00330 <span class="comment"> * Check if new data has arrived on a protosocket.</span><a name="l00331"></a>00331 <span class="comment"> *</span><a name="l00332"></a>00332 <span class="comment"> * This macro is used in conjunction with the PSOCK_WAIT_UNTIL()</span><a name="l00333"></a>00333 <span class="comment"> * macro to check if data has arrived on a protosocket.</span><a name="l00334"></a>00334 <span class="comment"> *</span><a name="l00335"></a>00335 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket.</span><a name="l00336"></a>00336 <span class="comment"> *</span><a name="l00337"></a>00337 <span class="comment"> * \hideinitializer</span><a name="l00338"></a>00338 <span class="comment"> */</span><a name="l00339"></a><a class="code" href="a00158.html#g55ce98ea4d6f22e9d5068b904d4d2447">00339</a> <span class="preprocessor">#define PSOCK_NEWDATA(psock) psock_newdata(psock)</span><a name="l00340"></a>00340 <span class="preprocessor"></span><span class="comment"></span><a name="l00341"></a>00341 <span class="comment">/**</span><a name="l00342"></a>00342 <span class="comment"> * Wait until a condition is true.</span><a name="l00343"></a>00343 <span class="comment"> *</span><a name="l00344"></a>00344 <span class="comment"> * This macro blocks the protothread until the specified condition is</span><a name="l00345"></a>00345 <span class="comment"> * true. The macro PSOCK_NEWDATA() can be used to check if new data</span><a name="l00346"></a>00346 <span class="comment"> * arrives when the protosocket is waiting.</span><a name="l00347"></a>00347 <span class="comment"> *</span><a name="l00348"></a>00348 <span class="comment"> * Typically, this macro is used as follows:</span><a name="l00349"></a>00349 <span class="comment"> *</span><a name="l00350"></a>00350 <span class="comment"> \code</span><a name="l00351"></a>00351 <span class="comment"> PT_THREAD(thread(struct psock *s, struct timer *t))</span><a name="l00352"></a>00352 <span class="comment"> {</span><a name="l00353"></a>00353 <span class="comment">   PSOCK_BEGIN(s);</span><a name="l00354"></a>00354 <span class="comment"></span><a name="l00355"></a>00355 <span class="comment">   PSOCK_WAIT_UNTIL(s, PSOCK_NEWADATA(s) || timer_expired(t));</span><a name="l00356"></a>00356 <span class="comment">   </span><a name="l00357"></a>00357 <span class="comment">   if(PSOCK_NEWDATA(s)) {</span><a name="l00358"></a>00358 <span class="comment">     PSOCK_READTO(s, '\n');</span><a name="l00359"></a>00359 <span class="comment">   } else {</span><a name="l00360"></a>00360 <span class="comment">     handle_timed_out(s);</span><a name="l00361"></a>00361 <span class="comment">   }</span><a name="l00362"></a>00362 <span class="comment">   </span><a name="l00363"></a>00363 <span class="comment">   PSOCK_END(s);</span><a name="l00364"></a>00364 <span class="comment"> }</span><a name="l00365"></a>00365 <span class="comment"> \endcode</span><a name="l00366"></a>00366 <span class="comment"> *</span><a name="l00367"></a>00367 <span class="comment"> * \param psock (struct psock *) A pointer to the protosocket.</span><a name="l00368"></a>00368 <span class="comment"> * \param condition The condition to wait for.</span><a name="l00369"></a>00369 <span class="comment"> *</span><a name="l00370"></a>00370 <span class="comment"> * \hideinitializer</span><a name="l00371"></a>00371 <span class="comment"> */</span><a name="l00372"></a><a class="code" href="a00158.html#g2ebfe5c8a7f3173714efdf2df74fc392">00372</a> <span class="preprocessor">#define PSOCK_WAIT_UNTIL(psock, condition)    \</span><a name="l00373"></a>00373 <span class="preprocessor">  PT_WAIT_UNTIL(&amp;((psock)-&gt;pt), (condition));</span><a name="l00374"></a>00374 <span class="preprocessor"></span><a name="l00375"></a><a class="code" href="a00158.html#ga87ff36af81990e6ffe20d76d5e4606f">00375</a> <span class="preprocessor">#define PSOCK_WAIT_THREAD(psock, condition)   \</span><a name="l00376"></a>00376 <span class="preprocessor">  PT_WAIT_THREAD(&amp;((psock)-&gt;pt), (condition))</span><a name="l00377"></a>00377 <span class="preprocessor"></span><a name="l00378"></a>00378 <span class="preprocessor">#endif </span><span class="comment">/* __PSOCK_H__ */</span><a name="l00379"></a>00379 <span class="comment"></span><a name="l00380"></a>00380 <span class="comment">/** @} */</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -