| Index: net/third_party/udt/doc/doc/t-data.htm
|
| ===================================================================
|
| --- net/third_party/udt/doc/doc/t-data.htm (revision 78992)
|
| +++ net/third_party/udt/doc/doc/t-data.htm (working copy)
|
| @@ -1,59 +0,0 @@
|
| -<!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/html; charset=iso-8859-1" />
|
| -<title>Introduction</title>
|
| -<link rel="stylesheet" href="udtdoc.css" type="text/css" />
|
| -</head>
|
| -
|
| -<body>
|
| -<div class="ref_head"> UDT Tutorial</div>
|
| -
|
| -<h3><font color="#000080">Transfering Data using UDT</font></h3>
|
| -<p>This section describes using UDT to transfer data in streaming mode. This is exactly the same as using traditional BSD socket.</p>
|
| -
|
| -<p>In streaming mode, neither a send or a recv call can guarantee that all data are sent or received in one call, because there is no boundary information in the data stream. Application
|
| -should use loops for both sending and receiving.</p>
|
| -
|
| -<p><strong>Example: send a data block (buf, size) using UDT.</strong></p>
|
| -<div class="code">
|
| - int ssize = 0;<br>
|
| - int ss;<br>
|
| - while (ssize < size)<br>
|
| - {<br>
|
| - if (UDT::ERROR == (ss = UDT::send(usock, buf + ssize, size - ssize, 0)))<br>
|
| - {<br>
|
| - cout << "send:" << UDT::getlasterror().getErrorMessage() << endl;<br>
|
| - break;<br>
|
| - }<br>
|
| -<br>
|
| - ssize += ss;<br>
|
| - }
|
| -</div>
|
| -
|
| -<p>Similarily, to receive data stream, the following example code can be used.</p>
|
| -<p><strong>Example: receive "size" of data into buffer "buf" </strong></p>
|
| -<div class="code">
|
| - int rsize = 0;<br>
|
| - int rs;<br>
|
| - while (rsize < size)<br>
|
| - {<br>
|
| - if (UDT::ERROR == (rs = UDT::recv(usock, buf + rsize, size - rsize, 0)))<br>
|
| - <br>
|
| - cout << "recv:" << UDT::getlasterror().getErrorMessage() << endl;<br>
|
| - break;<br>
|
| - }<br>
|
| -<br>
|
| - rsize += rs;<br>
|
| - }
|
| -</div>
|
| -
|
| -<h5>Blocking vs. Non-blocking</h5>
|
| -<p>UDT supports both blocking and non-blocking mode. The above example demonstrated the blocking mode. In non-blocking mode, UDT::send and UDT::recv will return immediately if there is
|
| -no buffer available. Usually, non-blocking calls are used together with accept.</p>
|
| -<p>UDT also supports timed blocking IO with UDT_SNDTIMEO and UDT_RCVTIMEO. This is in the middle between complete blocking and complete non-blocking calls. Timed IO will block the
|
| -sending or receiving call for a limited period. This is sometimes useful if the application does not know if and when the peer side will send a message.</p>
|
| -
|
| -<p> </p>
|
| -</body>
|
| -</html>
|
|
|