Sophie

Sophie

distrib > Mageia > 1 > i586 > media > core-release > by-pkgid > f0bc842dcf666302badcfd2545f3387c > files > 67

libfreetds0-doc-0.82-12.mga1.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>FreeTDS API: Network functions</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.1 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<h1>Network functions<br>
<small>
[<a class="el" href="a00294.html">LibTDS API</a>]</small>
</h1>Functions for reading or writing from network.  
<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga31" doxytag="network::TEMP_FREE"></a>
#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>TEMP_FREE</b>&nbsp;&nbsp;&nbsp;;</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga30" doxytag="network::TEMP_INIT"></a>
#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>TEMP_INIT</b>(s)&nbsp;&nbsp;&nbsp;char temp[s]</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga32" doxytag="network::TEMP_SIZE"></a>
#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>TEMP_SIZE</b>&nbsp;&nbsp;&nbsp;sizeof(temp)</td></tr>

<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga0" doxytag="network::ioctl_nonblocking_t"></a>
typedef unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><b>ioctl_nonblocking_t</b></td></tr>

<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga5" doxytag="network::goodread"></a>
static int&nbsp;</td><td class="memItemRight" valign="bottom"><b>goodread</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, unsigned char *buf, int buflen)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga20" doxytag="network::read_and_convert"></a>
static int&nbsp;</td><td class="memItemRight" valign="bottom"><b>read_and_convert</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, const TDSICONV *char_conv, size_t *wire_size, char **outbuf, size_t *outbytesleft)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga9">tds7_get_instance_port</a> (const char *ip_addr, const char *instance)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get port of given instance.  <a href="#ga9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga2" doxytag="network::tds_close_socket"></a>
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_close_socket</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga29">tds_flush_packet</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Flush packet to server.  <a href="#ga29"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga10" doxytag="network::tds_get_byte"></a>
unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_get_byte</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga17">tds_get_char_data</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, char *row_buffer, size_t wire_size, <a class="el" href="a00140.html">TDSCOLUMN</a> *curcol)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fetch character data the wire.  <a href="#ga17"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga14" doxytag="network::tds_get_int"></a>
TDS_INT&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga14">tds_get_int</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get an int32 from the server. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga15" doxytag="network::tds_get_int8"></a>
TDS_INT8&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_get_int8</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga18">tds_get_n</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, void *dest, int need)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get N bytes from the buffer and return them in the already allocated space given to us.  <a href="#ga18"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga19" doxytag="network::tds_get_size_by_type"></a>
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga19">tds_get_size_by_type</a> (int servertype)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the number of bytes needed by specified type. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga13" doxytag="network::tds_get_smallint"></a>
TDS_SMALLINT&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga13">tds_get_smallint</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get an int16 from the server. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga16">tds_get_string</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, int string_len, char *dest, size_t dest_size)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fetch a string from the wire.  <a href="#ga16"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga4">tds_goodread</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, unsigned char *buf, int buflen, unsigned char unfinished)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Loops until we have received buflen characters return -1 on failure This function does not close the socket.  <a href="#ga4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga7">tds_goodwrite</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, const unsigned char *p, int len, unsigned char last)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga28" doxytag="network::tds_init_write_buf"></a>
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_init_write_buf</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga1" doxytag="network::tds_open_socket"></a>
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_open_socket</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, const char *ip_addr, unsigned int port, int timeout)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga12" doxytag="network::tds_peek"></a>
unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_peek</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga23" doxytag="network::tds_put_buf"></a>
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_put_buf</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, const unsigned char *buf, int dsize, int ssize)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga27" doxytag="network::tds_put_byte"></a>
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_put_byte</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, unsigned char c)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga25" doxytag="network::tds_put_int"></a>
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_put_int</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, TDS_INT i)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga24" doxytag="network::tds_put_int8"></a>
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_put_int8</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, TDS_INT8 i)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga21" doxytag="network::tds_put_n"></a>
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_put_n</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, const void *buf, int n)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga26" doxytag="network::tds_put_smallint"></a>
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_put_smallint</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, TDS_SMALLINT si)</td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga22">tds_put_string</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, const char *s, int len)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Output a string to wire automatic translate string to unicode if needed.  <a href="#ga22"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga6">tds_read_packet</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read in one 'packet' from the server.  <a href="#ga6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga3">tds_select</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, unsigned tds_sel, int timeout_seconds)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Select on a socket until it's available or the timeout expires.  <a href="#ga3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00291.html#ga11">tds_unget_byte</a> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unget will always work as long as you don't call it twice in a row.  <a href="#ga11"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga8" doxytag="network::tds_write_packet"></a>
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>tds_write_packet</b> (<a class="el" href="a00144.html">TDSSOCKET</a> *tds, unsigned char final)</td></tr>

</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Functions for reading or writing from network. 
<p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="ga9" doxytag="net.c::tds7_get_instance_port"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">int tds7_get_instance_port           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top">const char *&nbsp;</td>
          <td class="mdname" nowrap> <em>ip_addr</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname" nowrap> <em>instance</em></td>
        </tr>
        <tr>
          <td class="md"></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get port of given instance. 
<p>
<dl compact><dt><b>Returns:</b></dt><dd>port number or 0 if error </dd></dl>
    </td>
  </tr>
</table>
<a class="anchor" name="ga29" doxytag="write.c::tds_flush_packet"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">int tds_flush_packet           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="a00144.html">TDSSOCKET</a> *&nbsp;</td>
          <td class="mdname1" valign="top" nowrap> <em>tds</em>          </td>
          <td class="md" valign="top">&nbsp;)&nbsp;</td>
          <td class="md" nowrap></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Flush packet to server. 
<p>
<dl compact><dt><b>Returns:</b></dt><dd>TDS_FAIL or TDS_SUCCEED </dd></dl>
    </td>
  </tr>
</table>
<a class="anchor" name="ga17" doxytag="read.c::tds_get_char_data"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">int tds_get_char_data           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="a00144.html">TDSSOCKET</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>tds</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>char *&nbsp;</td>
          <td class="mdname" nowrap> <em>row_buffer</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname" nowrap> <em>wire_size</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap><a class="el" href="a00140.html">TDSCOLUMN</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>curcol</em></td>
        </tr>
        <tr>
          <td class="md"></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Fetch character data the wire. 
<p>
Output is NOT null terminated. If <em>char_conv</em> is not NULL, convert data accordingly. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>tds</em>&nbsp;</td><td>state information for the socket and the TDS protocol </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>row_buffer</em>&nbsp;</td><td>destination buffer in current_row. Can't be NULL </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>wire_size</em>&nbsp;</td><td>size to read from wire (in bytes) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>curcol</em>&nbsp;</td><td>column information </td></tr>
  </table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>TDS_SUCCEED or TDS_FAIL (probably memory error on text data) </dd></dl>
<dl compact><dt><b><a class="el" href="todo.html#_todo000046">Todo:</a></b></dt><dd>put a TDSICONV structure in every TDSCOLUMN </dd></dl>
    </td>
  </tr>
</table>
<a class="anchor" name="ga18" doxytag="read.c::tds_get_n"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">void* tds_get_n           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="a00144.html">TDSSOCKET</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>tds</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>void *&nbsp;</td>
          <td class="mdname" nowrap> <em>dest</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname" nowrap> <em>need</em></td>
        </tr>
        <tr>
          <td class="md"></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Get N bytes from the buffer and return them in the already allocated space given to us. 
<p>
We ASSUME that the person calling this function has done the bounds checking for us since they know how many bytes they want here. dest of NULL means we just want to eat the bytes. (<a href="mailto:tetherow@nol.org">tetherow@nol.org</a>)     </td>
  </tr>
</table>
<a class="anchor" name="ga16" doxytag="read.c::tds_get_string"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">int tds_get_string           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="a00144.html">TDSSOCKET</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>tds</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname" nowrap> <em>string_len</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>char *&nbsp;</td>
          <td class="mdname" nowrap> <em>dest</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>size_t&nbsp;</td>
          <td class="mdname" nowrap> <em>dest_size</em></td>
        </tr>
        <tr>
          <td class="md"></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Fetch a string from the wire. 
<p>
Output string is NOT null terminated. If TDS version is 7 or 8 read unicode string and convert it. This function should be use to read server default encoding strings like columns name, table names, etc, not for data (use tds_get_char_data instead) <dl compact><dt><b>Returns:</b></dt><dd>bytes written to <em>dest</em> </dd></dl>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>tds</em>&nbsp;</td><td>connection information </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>string_len</em>&nbsp;</td><td>length of string to read from wire (in server characters, bytes for tds4-tds5, ucs2 for tds7+) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>destination buffer, if NULL string is read and discarded </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dest_size</em>&nbsp;</td><td>destination buffer size, in bytes </td></tr>
  </table>
</dl>
    </td>
  </tr>
</table>
<a class="anchor" name="ga4" doxytag="net.c::tds_goodread"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">static int tds_goodread           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="a00144.html">TDSSOCKET</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>tds</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>unsigned char *&nbsp;</td>
          <td class="mdname" nowrap> <em>buf</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname" nowrap> <em>buflen</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>unsigned char&nbsp;</td>
          <td class="mdname" nowrap> <em>unfinished</em></td>
        </tr>
        <tr>
          <td class="md"></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"><code> [static]</code></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Loops until we have received buflen characters return -1 on failure This function does not close the socket. 
<p>
Maybe it should.     </td>
  </tr>
</table>
<a class="anchor" name="ga7" doxytag="net.c::tds_goodwrite"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">static int tds_goodwrite           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="a00144.html">TDSSOCKET</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>tds</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>const unsigned char *&nbsp;</td>
          <td class="mdname" nowrap> <em>p</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname" nowrap> <em>len</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>unsigned char&nbsp;</td>
          <td class="mdname" nowrap> <em>last</em></td>
        </tr>
        <tr>
          <td class="md"></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"><code> [static]</code></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>tds</em>&nbsp;</td><td>the famous socket </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p</em>&nbsp;</td><td>pointer to buffer </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len</em>&nbsp;</td><td>bytes in buffer </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>last</em>&nbsp;</td><td>1 if this is the last packet, else 0 </td></tr>
  </table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>len on success, &lt;0 on failure </dd></dl>
    </td>
  </tr>
</table>
<a class="anchor" name="ga22" doxytag="write.c::tds_put_string"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">int tds_put_string           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="a00144.html">TDSSOCKET</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>tds</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>const char *&nbsp;</td>
          <td class="mdname" nowrap> <em>s</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname" nowrap> <em>len</em></td>
        </tr>
        <tr>
          <td class="md"></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Output a string to wire automatic translate string to unicode if needed. 
<p>
<dl compact><dt><b>Returns:</b></dt><dd>bytes written to wire </dd></dl>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>tds</em>&nbsp;</td><td>state information for the socket and the TDS protocol </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>s</em>&nbsp;</td><td>string to write </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len</em>&nbsp;</td><td>length of string in characters, or -1 for null terminated </td></tr>
  </table>
</dl>
    </td>
  </tr>
</table>
<a class="anchor" name="ga6" doxytag="net.c::tds_read_packet"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">int tds_read_packet           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="a00144.html">TDSSOCKET</a> *&nbsp;</td>
          <td class="mdname1" valign="top" nowrap> <em>tds</em>          </td>
          <td class="md" valign="top">&nbsp;)&nbsp;</td>
          <td class="md" nowrap></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Read in one 'packet' from the server. 
<p>
This is a wrapped outer packet of the protocol (they bundle result packets into chunks and wrap them at what appears to be 512 bytes regardless of how that breaks internal packet up. (tetherow@nol.org) <dl compact><dt><b>Returns:</b></dt><dd>bytes read or -1 on failure </dd></dl>
    </td>
  </tr>
</table>
<a class="anchor" name="ga3" doxytag="net.c::tds_select"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">static int tds_select           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="a00144.html">TDSSOCKET</a> *&nbsp;</td>
          <td class="mdname" nowrap> <em>tds</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>unsigned&nbsp;</td>
          <td class="mdname" nowrap> <em>tds_sel</em>, </td>
        </tr>
        <tr>
          <td class="md" nowrap align="right"></td>
          <td class="md"></td>
          <td class="md" nowrap>int&nbsp;</td>
          <td class="mdname" nowrap> <em>timeout_seconds</em></td>
        </tr>
        <tr>
          <td class="md"></td>
          <td class="md">)&nbsp;</td>
          <td class="md" colspan="2"><code> [static]</code></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Select on a socket until it's available or the timeout expires. 
<p>
Meanwhile, call the interrupt function. <dl compact><dt><b>Returns:</b></dt><dd>&gt;0 ready descriptors 0 timeout &lt;0 error (cf. errno). Caller should close socket and return failure. This function does not call tdserror or close the socket because it can't know the context in which it's being called. </dd></dl>
    </td>
  </tr>
</table>
<a class="anchor" name="ga11" doxytag="read.c::tds_unget_byte"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
  <tr>
    <td class="mdRow">
      <table cellpadding="0" cellspacing="0" border="0">
        <tr>
          <td class="md" nowrap valign="top">void tds_unget_byte           </td>
          <td class="md" valign="top">(&nbsp;</td>
          <td class="md" nowrap valign="top"><a class="el" href="a00144.html">TDSSOCKET</a> *&nbsp;</td>
          <td class="mdname1" valign="top" nowrap> <em>tds</em>          </td>
          <td class="md" valign="top">&nbsp;)&nbsp;</td>
          <td class="md" nowrap></td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>

<p>
Unget will always work as long as you don't call it twice in a row. 
<p>
It it may work if you call it multiple times as long as you don't backup over the beginning of network packet boundary which can occur anywhere in the token stream.     </td>
  </tr>
</table>
<hr size="1"><address style="align: right;"><small>Generated on Wed May 7 19:22:11 2008 for FreeTDS API by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
</body>
</html>