autodoc.git / traditional_manual / chapter_9.html

version» Context lines:

autodoc.git/traditional_manual/chapter_9.html:1526:    but it certainly helps to increase data transfer speed when it does.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>open_socket()</code>, <code>accept()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>set_buffer_mode</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_buffer_mode</span>(</b><code class='object unresolved'>Stdio.IOBuffer</code>|<code class='datatype'>void</code> <code class='argument'>in</code>, <code class='object unresolved'>Stdio.IOBuffer</code>|<code class='datatype'>void</code> <code class='argument'>out</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Toggle the file to IOBuffer mode.</p> + <p> In this mode reading and writing will be done from IOBuffer objects,</p> + <p> It is assumed that the file will be used in non-blocking mode.</p> + <p> If <code>in</code> or <code>out</code> that specific buffer is used for the specified direction.</p> + <p> The default is to create new buffers for both directions when +  this function is called.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Normally you call <code>write</code> to re-trigger the write callback if +  you do not output anything in it (which will stop it from +  re-occuring again).</p> + <p> This will work with buffered mode as well, but simply adding more +  data to the output buffer will work as well.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>set_callbacks</b></span>   </dt> - <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_callbacks</span>(</b><code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>close_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_oob_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_oob_cb</code><b>)</b></code></p></dd> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_callbacks</span>(</b><code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>|<code class='object unresolved'>IOBuffer</code>:<code class='datatype'>int</code>) <code class='argument'>read_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>void</code>|<code class='object unresolved'>IOBuffer</code>:<code class='datatype'>int</code>) <code class='argument'>write_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>close_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_oob_cb</code>, <code class='datatype'>void</code>|<code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_oob_cb</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Installs all the specified callbacks at once. Use <code>UNDEFINED</code>    to keep the current setting for a callback.</p>   <p> Like <code>set_nonblocking</code>, the callbacks are installed atomically.    As opposed to <code>set_nonblocking</code>, this function does not do    anything with the stream, and it doesn't even have to be open.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>set_read_callback</code>, <code>set_write_callback</code>,
autodoc.git/traditional_manual/chapter_9.html:1560:   <span class='homogen--type'>Method</span>   <span class='homogen--name'><b>set_read_oob_callback</b></span><br>   <span class='homogen--type'>Method</span>   <span class='homogen--name'><b>set_write_oob_callback</b></span><br>   <span class='homogen--type'>Method</span>   <span class='homogen--name'><b>set_close_callback</b></span><br>   <span class='homogen--type'>Method</span>   <span class='homogen--name'><b>set_fs_event_callback</b></span><br>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_read_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_cb</code><b>)</b></code><br> + <code><code class='datatype'>void</code> <b><span class='method'>set_read_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='object unresolved'>IOBuffer</code>:<code class='datatype'>int</code>) <code class='argument'>read_cb</code><b>)</b></code><br>   <code><code class='datatype'>void</code> <b><span class='method'>set_write_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_cb</code><b>)</b></code><br> -  + <code><code class='datatype'>void</code> <b><span class='method'>set_write_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='object unresolved'>IOBuffer</code>:<code class='datatype'>int</code>) <code class='argument'>write_cb</code><b>)</b></code><br>   <code><code class='datatype'>void</code> <b><span class='method'>set_read_oob_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_oob_cb</code><b>)</b></code><br>   <code><code class='datatype'>void</code> <b><span class='method'>set_write_oob_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_oob_cb</code><b>)</b></code><br>   <code><code class='datatype'>void</code> <b><span class='method'>set_close_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>close_cb</code><b>)</b></code><br>   <code><code class='datatype'>void</code> <b><span class='method'>set_fs_event_callback</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>int</code>:<code class='datatype'>int</code>) <code class='argument'>fs_event_cb</code>, <code class='datatype'>int</code> <code class='argument'>event_mask</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>These functions set the various callbacks, which will be called    when various events occur on the stream. A zero as argument will    remove the callback.</p>   <p> A <code>Pike.Backend</code> object is responsible for calling the    callbacks. It requires a thread to be waiting in it to execute    the calls. That means that only one of the callbacks will be    running at a time, so you don't need mutexes between them.</p>   <p> Unless you've specified otherwise with the <code>set_backend</code>    function, the default backend <code>Pike.DefaultBackend</code> will be    used. It's normally activated by returning <code class='expr'>-1</code> from the    <tt>main</tt> function and will then execute in the main thread.</p>   <ul>   <li><p>When data arrives on the stream, <code>read_cb</code> will be called with    some or all of that data as the second argument.</p> -  + <p> If the file is in buffer mode, the second argument will be an IOBuffer.</p> + <p> This will always be the same buffer, so data you do not use in +  one read callback can be simply left in the buffer, when new +  data arrives it will be appended</p>   </li><li><p>When the stream has buffer space over for writing, <code>write_cb</code>    will be called so that you can write more data to it.</p>   <p> This callback is also called after the remote end of a socket    connection has closed the write direction. An attempt to write    data to it in that case will generate a <code>System.EPIPE</code> errno.    If the remote end has closed both directions simultaneously    (the usual case), Pike will first attempt to call <code>close_cb</code>,    then this callback (unless <code>close_cb</code> has closed the stream).</p> -  + <p> If the file is in buffer mode, the second argument will be an IOBuffer.</p> + <p> You should add data to write to this buffer.</p>   </li><li><p>When out-of-band data arrives on the stream, <code>read_oob_cb</code>    will be called with some or all of that data as the second    argument.</p>   </li><li><p>When the stream allows out-of-band data to be sent,    <code>write_oob_cb</code> will be called so that you can write more    out-of-band data to it.</p>   <p> If the OS doesn't separate the write events for normal and    out-of-band data, Pike will try to call <code>write_oob_cb</code> first.    If it doesn't write anything, then <code>write_cb</code> will be tried.    This also means that <code>write_oob_cb</code> might get called when the
autodoc.git/traditional_manual/chapter_9.html:1765:   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>set_blocking()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>set_nonblocking</b></span>   </dt> - <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>close_callback</code><b>)</b></code><br> - <code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>close_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_oob_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_oob_callback</code><b>)</b></code><br> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>|<code class='object unresolved'>IOBuffer</code>:<code class='datatype'>int</code>) <code class='argument'>read_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>void</code>|<code class='object unresolved'>IOBuffer</code>:<code class='datatype'>int</code>) <code class='argument'>write_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>close_callback</code><b>)</b></code><br> + <code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>|<code class='object unresolved'>IOBuffer</code>:<code class='datatype'>int</code>) <code class='argument'>read_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>void</code>|<code class='object unresolved'>IOBuffer</code>:<code class='datatype'>int</code>) <code class='argument'>write_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>close_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>, <code class='datatype'>string</code>:<code class='datatype'>int</code>) <code class='argument'>read_oob_callback</code>, <code class='datatype'>function</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int</code>) <code class='argument'>write_oob_callback</code><b>)</b></code><br>   <code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>This function sets a stream to nonblocking mode and installs the    specified callbacks. See the <code class='expr'>set_*_callback</code> functions    for details about them. If no arguments are given, the callbacks    will be cleared.</p>   </dd>   <dt class='head--doc'>Note</dt>   <dd class='body--doc'><p>As opposed to calling the set callback functions separately,
autodoc.git/traditional_manual/chapter_9.html:6105:    copy.</p>   </dd>   <dt class='head--doc'>Note</dt>   <dd class='body--doc'><p>The "avoid copy" part means that a IOBuffer will never shrink    unless you call the <code>trim</code> function.</p>   </dd></dl>      <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>__fd_set_output</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>__fd_set_output</span>(</b><code class='datatype'>object</code> <code class='argument'>f</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This tells the buffer to trigger the write callback for the +  specified filedescriptor when data is added to the buffer.</p> + <p> This is used internally by Stdio.File to handle nonblocking +  buffered mode, and is not really intended to be used directly.</p> + <p> If f is 0 the state is cleared.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>_encode</b></span><br>   <span class='homogen--type'>Method</span>   <span class='homogen--name'><b>_decode</b></span><br>   </dt>   <dd><p><code><span class='datatype'>string(8bit)</span> <b><span class='method'>encode_value</span>(</b><span class='class'>Stdio.IOBuffer</span> <span class='argument'>data</span>)</b></code><br>   <code><span class='class'>Stdio.IOBuffer</span> <b><span class='method'>decode_value</span>(</b><span class='datatype'>string(8bit)</span> <span class='argument'>data</span>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Encode and decode Stdio.IOBuffer objects.    Only the buffer data is kept, no other state is saved.</p>