Current File : //usr/local/emps/share/doc/freetds/reference/a00564.html |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.20"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FreeTDS API: Network functions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">FreeTDS API
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.20 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> |
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Network functions<div class="ingroups"><a class="el" href="a00567.html">LibTDS API</a></div></div> </div>
</div><!--header-->
<div class="contents">
<p>Functions for reading or writing from network.
<a href="#details">More...</a></p>
<div class="dynheader">
Collaboration diagram for Network functions:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 0 -->
</div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00767.html">retry_addr</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga676c4dee6522815b16fdc8e448e43590"><td class="memItemLeft" align="right" valign="top">static size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga676c4dee6522815b16fdc8e448e43590">read_and_convert</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, <a class="el" href="a00983.html">TDSICONV</a> *char_conv, size_t *wire_size, char *outbuf, size_t outbytesleft)</td></tr>
<tr class="memdesc:ga676c4dee6522815b16fdc8e448e43590"><td class="mdescLeft"> </td><td class="mdescRight">For UTF-8 and similar, <a class="el" href="a00561.html#ga87db49044919f1bc84c0ff5e9ab00304" title="Wrapper around iconv(3).">tds_iconv()</a> may encounter a partial sequence when the chunk boundary is not aligned with the character boundary. <a href="a00564.html#ga676c4dee6522815b16fdc8e448e43590">More...</a><br /></td></tr>
<tr class="separator:ga676c4dee6522815b16fdc8e448e43590"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gac23c12ccb3e8599f10f305e993e216f6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#gac23c12ccb3e8599f10f305e993e216f6">tds7_get_instance_port</a> (struct addrinfo *addr, const char *instance)</td></tr>
<tr class="memdesc:gac23c12ccb3e8599f10f305e993e216f6"><td class="mdescLeft"> </td><td class="mdescRight">Get port of given instance. <a href="a00564.html#gac23c12ccb3e8599f10f305e993e216f6">More...</a><br /></td></tr>
<tr class="separator:gac23c12ccb3e8599f10f305e993e216f6"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga954dcc3b0332fa9448d9edf59c0fe439"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga954dcc3b0332fa9448d9edf59c0fe439">tds7_get_instance_ports</a> (FILE *output, struct addrinfo *addr)</td></tr>
<tr class="memdesc:ga954dcc3b0332fa9448d9edf59c0fe439"><td class="mdescLeft"> </td><td class="mdescRight">Get port of all instances. <a href="a00564.html#ga954dcc3b0332fa9448d9edf59c0fe439">More...</a><br /></td></tr>
<tr class="separator:ga954dcc3b0332fa9448d9edf59c0fe439"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gac56a35582ee84901b48f17510a838797"><td class="memItemLeft" align="right" valign="top"><a id="gac56a35582ee84901b48f17510a838797"></a>
const char * </td><td class="memItemRight" valign="bottom"><b>tds_addrinfo2str</b> (struct addrinfo *addr, char *name, int namemax)</td></tr>
<tr class="separator:gac56a35582ee84901b48f17510a838797"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga6a4fd36bd1ca8b7da648df2e37982bf0"><td class="memItemLeft" align="right" valign="top"><a id="ga6a4fd36bd1ca8b7da648df2e37982bf0"></a>
static void </td><td class="memItemRight" valign="bottom"><b>tds_addrinfo_set_port</b> (struct addrinfo *addr, unsigned int port)</td></tr>
<tr class="separator:ga6a4fd36bd1ca8b7da648df2e37982bf0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga3e3f76009fce5ceedb2f42bb2c9aed2e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga3e3f76009fce5ceedb2f42bb2c9aed2e">tds_close_socket</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds)</td></tr>
<tr class="memdesc:ga3e3f76009fce5ceedb2f42bb2c9aed2e"><td class="mdescLeft"> </td><td class="mdescRight">Close current socket. <a href="a00564.html#ga3e3f76009fce5ceedb2f42bb2c9aed2e">More...</a><br /></td></tr>
<tr class="separator:ga3e3f76009fce5ceedb2f42bb2c9aed2e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gac6388b4451a68f9a7abcfb70bc1f30d4"><td class="memItemLeft" align="right" valign="top"><a id="gac6388b4451a68f9a7abcfb70bc1f30d4"></a>
 </td><td class="memItemRight" valign="bottom"><b>TDS_COMPILE_CHECK</b> (additional, TDS_ADDITIONAL_SPACE !=0)</td></tr>
<tr class="separator:gac6388b4451a68f9a7abcfb70bc1f30d4"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaf48e52482db1642114e721e71850fa27"><td class="memItemLeft" align="right" valign="top"><a id="gaf48e52482db1642114e721e71850fa27"></a>
void </td><td class="memItemRight" valign="bottom"><b>tds_connection_close</b> (<a class="el" href="a01231.html">TDSCONNECTION</a> *conn)</td></tr>
<tr class="separator:gaf48e52482db1642114e721e71850fa27"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga36debbaba89377b8b81ae9bd84602b17"><td class="memItemLeft" align="right" valign="top"><a id="ga36debbaba89377b8b81ae9bd84602b17"></a>
int </td><td class="memItemRight" valign="bottom"><b>tds_connection_read</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, unsigned char *buf, int buflen)</td></tr>
<tr class="separator:ga36debbaba89377b8b81ae9bd84602b17"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga389800c197a9cf2bf3a0449e4f598945"><td class="memItemLeft" align="right" valign="top"><a id="ga389800c197a9cf2bf3a0449e4f598945"></a>
static int </td><td class="memItemRight" valign="bottom"><b>tds_connection_signaled</b> (<a class="el" href="a01231.html">TDSCONNECTION</a> *conn)</td></tr>
<tr class="separator:ga389800c197a9cf2bf3a0449e4f598945"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga55f3f63be38671dba897117a02ef09f0"><td class="memItemLeft" align="right" valign="top"><a id="ga55f3f63be38671dba897117a02ef09f0"></a>
int </td><td class="memItemRight" valign="bottom"><b>tds_connection_write</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, const unsigned char *buf, int buflen, int final)</td></tr>
<tr class="separator:ga55f3f63be38671dba897117a02ef09f0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gafae08056186b143f3ef1399307dc9be7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00566.html#gafddddf5bd7ad223cadee3d3bdc899954">DSTR</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#gafae08056186b143f3ef1399307dc9be7">tds_dstr_get</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, <a class="el" href="a00566.html#gafddddf5bd7ad223cadee3d3bdc899954">DSTR</a> *s, size_t len)</td></tr>
<tr class="memdesc:gafae08056186b143f3ef1399307dc9be7"><td class="mdescLeft"> </td><td class="mdescRight">Reads a string from wire and put in a DSTR. <a href="a00564.html#gafae08056186b143f3ef1399307dc9be7">More...</a><br /></td></tr>
<tr class="separator:gafae08056186b143f3ef1399307dc9be7"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga5feb53554e8917a81bbbc332163a61fb"><td class="memItemLeft" align="right" valign="top">TDSRET </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga5feb53554e8917a81bbbc332163a61fb">tds_flush_packet</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds)</td></tr>
<tr class="memdesc:ga5feb53554e8917a81bbbc332163a61fb"><td class="mdescLeft"> </td><td class="mdescRight">Flush packet to server. <a href="a00564.html#ga5feb53554e8917a81bbbc332163a61fb">More...</a><br /></td></tr>
<tr class="separator:ga5feb53554e8917a81bbbc332163a61fb"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga6b2b012b999bd0a4f159fabc8d11a5bf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga6b2b012b999bd0a4f159fabc8d11a5bf">tds_freeze</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, <a class="el" href="a01243.html">TDSFREEZE</a> *freeze, unsigned size_len)</td></tr>
<tr class="memdesc:ga6b2b012b999bd0a4f159fabc8d11a5bf"><td class="mdescLeft"> </td><td class="mdescRight">Stop writing to server and cache every packet not sending them to server. <a href="a00564.html#ga6b2b012b999bd0a4f159fabc8d11a5bf">More...</a><br /></td></tr>
<tr class="separator:ga6b2b012b999bd0a4f159fabc8d11a5bf"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga7274d9c5dc75c58bb7d1f1c29e03a73e"><td class="memItemLeft" align="right" valign="top">TDSRET </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga7274d9c5dc75c58bb7d1f1c29e03a73e">tds_freeze_abort</a> (<a class="el" href="a01243.html">TDSFREEZE</a> *freeze)</td></tr>
<tr class="memdesc:ga7274d9c5dc75c58bb7d1f1c29e03a73e"><td class="mdescLeft"> </td><td class="mdescRight">Discard all data written after the freeze. <a href="a00564.html#ga7274d9c5dc75c58bb7d1f1c29e03a73e">More...</a><br /></td></tr>
<tr class="separator:ga7274d9c5dc75c58bb7d1f1c29e03a73e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga633f62fb8e5310abfa42c02fba9c6500"><td class="memItemLeft" align="right" valign="top">TDSRET </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga633f62fb8e5310abfa42c02fba9c6500">tds_freeze_close</a> (<a class="el" href="a01243.html">TDSFREEZE</a> *freeze)</td></tr>
<tr class="memdesc:ga633f62fb8e5310abfa42c02fba9c6500"><td class="mdescLeft"> </td><td class="mdescRight">Stop keeping data for this specific freeze. <a href="a00564.html#ga633f62fb8e5310abfa42c02fba9c6500">More...</a><br /></td></tr>
<tr class="separator:ga633f62fb8e5310abfa42c02fba9c6500"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga2660b893ae2bf36fe1b63b354e748bad"><td class="memItemLeft" align="right" valign="top">TDSRET </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga2660b893ae2bf36fe1b63b354e748bad">tds_freeze_close_len</a> (<a class="el" href="a01243.html">TDSFREEZE</a> *freeze, int32_t size)</td></tr>
<tr class="memdesc:ga2660b893ae2bf36fe1b63b354e748bad"><td class="mdescLeft"> </td><td class="mdescRight">Stop keeping data for this specific freeze. <a href="a00564.html#ga2660b893ae2bf36fe1b63b354e748bad">More...</a><br /></td></tr>
<tr class="separator:ga2660b893ae2bf36fe1b63b354e748bad"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga31cf37271d08b0733d0b8e06b9db1606"><td class="memItemLeft" align="right" valign="top"><a id="ga31cf37271d08b0733d0b8e06b9db1606"></a>
static void </td><td class="memItemRight" valign="bottom"><b>tds_freeze_update_size</b> (const <a class="el" href="a01243.html">TDSFREEZE</a> *freeze, int32_t size)</td></tr>
<tr class="separator:ga31cf37271d08b0733d0b8e06b9db1606"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga528cc96da09c11bc2930daae64e33e83"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga528cc96da09c11bc2930daae64e33e83">tds_freeze_written</a> (<a class="el" href="a01243.html">TDSFREEZE</a> *freeze)</td></tr>
<tr class="memdesc:ga528cc96da09c11bc2930daae64e33e83"><td class="mdescLeft"> </td><td class="mdescRight">Compute how many bytes has been written from freeze. <a href="a00564.html#ga528cc96da09c11bc2930daae64e33e83">More...</a><br /></td></tr>
<tr class="separator:ga528cc96da09c11bc2930daae64e33e83"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga0cb72d3f6943795c39db1fa692be0a58"><td class="memItemLeft" align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga0cb72d3f6943795c39db1fa692be0a58">tds_get_byte</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds)</td></tr>
<tr class="memdesc:ga0cb72d3f6943795c39db1fa692be0a58"><td class="mdescLeft"> </td><td class="mdescRight">Return a single byte from the input buffer. <a href="a00564.html#ga0cb72d3f6943795c39db1fa692be0a58">More...</a><br /></td></tr>
<tr class="separator:ga0cb72d3f6943795c39db1fa692be0a58"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga8d214089b6e97fc0da5e0be09f216d73"><td class="memItemLeft" align="right" valign="top">TDSRET </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga8d214089b6e97fc0da5e0be09f216d73">tds_get_char_data</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, char *row_buffer, size_t wire_size, <a class="el" href="a01175.html">TDSCOLUMN</a> *curcol)</td></tr>
<tr class="memdesc:ga8d214089b6e97fc0da5e0be09f216d73"><td class="mdescLeft"> </td><td class="mdescRight">Fetch character data the wire. <a href="a00564.html#ga8d214089b6e97fc0da5e0be09f216d73">More...</a><br /></td></tr>
<tr class="separator:ga8d214089b6e97fc0da5e0be09f216d73"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gae777dd57e8d1bb40349d7d7d8434fddf"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#gae777dd57e8d1bb40349d7d7d8434fddf">tds_get_n</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, void *dest, size_t need)</td></tr>
<tr class="memdesc:gae777dd57e8d1bb40349d7d7d8434fddf"><td class="mdescLeft"> </td><td class="mdescRight">Get N bytes from the buffer and return them in the already allocated space <br />
given to us. <a href="a00564.html#gae777dd57e8d1bb40349d7d7d8434fddf">More...</a><br /></td></tr>
<tr class="separator:gae777dd57e8d1bb40349d7d7d8434fddf"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaeeadab3fb1d65c942733014f65eef9bd"><td class="memItemLeft" align="right" valign="top"><a id="gaeeadab3fb1d65c942733014f65eef9bd"></a>
static <a class="el" href="a01223.html">TDSPACKET</a> * </td><td class="memItemRight" valign="bottom"><b>tds_get_packet</b> (<a class="el" href="a01231.html">TDSCONNECTION</a> *conn, unsigned len)</td></tr>
<tr class="separator:gaeeadab3fb1d65c942733014f65eef9bd"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga4a2418e0a4533d616ef3da526236f2b8"><td class="memItemLeft" align="right" valign="top"><a id="ga4a2418e0a4533d616ef3da526236f2b8"></a>
static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga4a2418e0a4533d616ef3da526236f2b8">tds_get_socket_error</a> (TDS_SYS_SOCKET sock)</td></tr>
<tr class="memdesc:ga4a2418e0a4533d616ef3da526236f2b8"><td class="mdescLeft"> </td><td class="mdescRight">Returns error stored in the socket. <br /></td></tr>
<tr class="separator:ga4a2418e0a4533d616ef3da526236f2b8"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga90f080e6e9448feac15dee1370d66802"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga90f080e6e9448feac15dee1370d66802">tds_get_string</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, size_t string_len, char *dest, size_t dest_size)</td></tr>
<tr class="memdesc:ga90f080e6e9448feac15dee1370d66802"><td class="mdescLeft"> </td><td class="mdescRight">Fetch a string from the wire. <a href="a00564.html#ga90f080e6e9448feac15dee1370d66802">More...</a><br /></td></tr>
<tr class="separator:ga90f080e6e9448feac15dee1370d66802"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga9ac121c269e203337a48c5bf8afc48c3"><td class="memItemLeft" align="right" valign="top">TDS_UINT </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga9ac121c269e203337a48c5bf8afc48c3">tds_get_uint</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds)</td></tr>
<tr class="memdesc:ga9ac121c269e203337a48c5bf8afc48c3"><td class="mdescLeft"> </td><td class="mdescRight">Get an int32 from the server. <a href="a00564.html#ga9ac121c269e203337a48c5bf8afc48c3">More...</a><br /></td></tr>
<tr class="separator:ga9ac121c269e203337a48c5bf8afc48c3"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga8ab6c87318eaf15ea17a9575763f7809"><td class="memItemLeft" align="right" valign="top">TDS_UINT8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga8ab6c87318eaf15ea17a9575763f7809">tds_get_uint8</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds)</td></tr>
<tr class="memdesc:ga8ab6c87318eaf15ea17a9575763f7809"><td class="mdescLeft"> </td><td class="mdescRight">Get an uint64 from the server. <a href="a00564.html#ga8ab6c87318eaf15ea17a9575763f7809">More...</a><br /></td></tr>
<tr class="separator:ga8ab6c87318eaf15ea17a9575763f7809"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gad38aa5b9547817854ccba1fcc7855861"><td class="memItemLeft" align="right" valign="top"><a id="gad38aa5b9547817854ccba1fcc7855861"></a>
TDS_USMALLINT </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#gad38aa5b9547817854ccba1fcc7855861">tds_get_usmallint</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds)</td></tr>
<tr class="memdesc:gad38aa5b9547817854ccba1fcc7855861"><td class="mdescLeft"> </td><td class="mdescRight">Get an int16 from the server. <br /></td></tr>
<tr class="separator:gad38aa5b9547817854ccba1fcc7855861"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga6f2ae00407f59fb1ab280fa44a56295e"><td class="memItemLeft" align="right" valign="top"><a id="ga6f2ae00407f59fb1ab280fa44a56295e"></a>
int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga6f2ae00407f59fb1ab280fa44a56295e">tds_goodread</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, unsigned char *buf, int buflen)</td></tr>
<tr class="memdesc:ga6f2ae00407f59fb1ab280fa44a56295e"><td class="mdescLeft"> </td><td class="mdescRight">Loops until we have received some characters return -1 on failure. <br /></td></tr>
<tr class="separator:ga6f2ae00407f59fb1ab280fa44a56295e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga2734407109c834c5dda7ff8a45c71230"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga2734407109c834c5dda7ff8a45c71230">tds_goodwrite</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, const unsigned char *buffer, size_t buflen)</td></tr>
<tr class="separator:ga2734407109c834c5dda7ff8a45c71230"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gad909967e04a0929c511e9d78527221b8"><td class="memItemLeft" align="right" valign="top"><a id="gad909967e04a0929c511e9d78527221b8"></a>
int </td><td class="memItemRight" valign="bottom"><b>tds_init_write_buf</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds)</td></tr>
<tr class="separator:gad909967e04a0929c511e9d78527221b8"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaf805811ba08749b5bbe537366f23c2fb"><td class="memItemLeft" align="right" valign="top"><a id="gaf805811ba08749b5bbe537366f23c2fb"></a>
TDSERRNO </td><td class="memItemRight" valign="bottom"><b>tds_open_socket</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, struct addrinfo *addr, unsigned int port, int timeout, int *p_oserr)</td></tr>
<tr class="separator:gaf805811ba08749b5bbe537366f23c2fb"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gab435f05cbfc6ecb1e206302f44fb00ea"><td class="memItemLeft" align="right" valign="top"><a id="gab435f05cbfc6ecb1e206302f44fb00ea"></a>
static void </td><td class="memItemRight" valign="bottom"><b>tds_packet_cache_add</b> (<a class="el" href="a01231.html">TDSCONNECTION</a> *conn, <a class="el" href="a01223.html">TDSPACKET</a> *packet)</td></tr>
<tr class="separator:gab435f05cbfc6ecb1e206302f44fb00ea"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga221e98a9c8be96ec6c8547891e1b53af"><td class="memItemLeft" align="right" valign="top">unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga221e98a9c8be96ec6c8547891e1b53af">tds_peek</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds)</td></tr>
<tr class="memdesc:ga221e98a9c8be96ec6c8547891e1b53af"><td class="mdescLeft"> </td><td class="mdescRight">Reads a byte from the TDS stream without removing it. <a href="a00564.html#ga221e98a9c8be96ec6c8547891e1b53af">More...</a><br /></td></tr>
<tr class="separator:ga221e98a9c8be96ec6c8547891e1b53af"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga71f4c47764001c9e2f9c89e35710a798"><td class="memItemLeft" align="right" valign="top"><a id="ga71f4c47764001c9e2f9c89e35710a798"></a>
int </td><td class="memItemRight" valign="bottom"><b>tds_put_buf</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, const unsigned char *buf, int dsize, int ssize)</td></tr>
<tr class="separator:ga71f4c47764001c9e2f9c89e35710a798"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaee5d7789a3019c91cb71b2777340c3f0"><td class="memItemLeft" align="right" valign="top"><a id="gaee5d7789a3019c91cb71b2777340c3f0"></a>
int </td><td class="memItemRight" valign="bottom"><b>tds_put_byte</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, unsigned char c)</td></tr>
<tr class="separator:gaee5d7789a3019c91cb71b2777340c3f0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaa449ce88d3e797f5abfaba89ac1b73f4"><td class="memItemLeft" align="right" valign="top"><a id="gaa449ce88d3e797f5abfaba89ac1b73f4"></a>
int </td><td class="memItemRight" valign="bottom"><b>tds_put_cancel</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds)</td></tr>
<tr class="separator:gaa449ce88d3e797f5abfaba89ac1b73f4"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaefcc2a4e3166c255f19b8d938fcf7963"><td class="memItemLeft" align="right" valign="top"><a id="gaefcc2a4e3166c255f19b8d938fcf7963"></a>
int </td><td class="memItemRight" valign="bottom"><b>tds_put_int</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, TDS_INT i)</td></tr>
<tr class="separator:gaefcc2a4e3166c255f19b8d938fcf7963"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga4b7e7fa90c88e41dbad92583020d39d0"><td class="memItemLeft" align="right" valign="top"><a id="ga4b7e7fa90c88e41dbad92583020d39d0"></a>
int </td><td class="memItemRight" valign="bottom"><b>tds_put_int8</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, TDS_INT8 i)</td></tr>
<tr class="separator:ga4b7e7fa90c88e41dbad92583020d39d0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga79393daf59e5c39be91d4f609bd4d0b9"><td class="memItemLeft" align="right" valign="top"><a id="ga79393daf59e5c39be91d4f609bd4d0b9"></a>
int </td><td class="memItemRight" valign="bottom"><b>tds_put_n</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, const void *buf, size_t n)</td></tr>
<tr class="separator:ga79393daf59e5c39be91d4f609bd4d0b9"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaeda567ed45de44b0814c9f6cc0ef05fc"><td class="memItemLeft" align="right" valign="top"><a id="gaeda567ed45de44b0814c9f6cc0ef05fc"></a>
int </td><td class="memItemRight" valign="bottom"><b>tds_put_smallint</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, TDS_SMALLINT si)</td></tr>
<tr class="separator:gaeda567ed45de44b0814c9f6cc0ef05fc"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga1fcaf8d488cc1390f106ce3ad0bf37b4"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga1fcaf8d488cc1390f106ce3ad0bf37b4">tds_put_string</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, const char *s, int len)</td></tr>
<tr class="memdesc:ga1fcaf8d488cc1390f106ce3ad0bf37b4"><td class="mdescLeft"> </td><td class="mdescRight">Output a string to wire automatic translate string to unicode if needed. <a href="a00564.html#ga1fcaf8d488cc1390f106ce3ad0bf37b4">More...</a><br /></td></tr>
<tr class="separator:ga1fcaf8d488cc1390f106ce3ad0bf37b4"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga410619783bdf2bb60b0f27a5578e0e07"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga410619783bdf2bb60b0f27a5578e0e07">tds_read_packet</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds)</td></tr>
<tr class="memdesc:ga410619783bdf2bb60b0f27a5578e0e07"><td class="mdescLeft"> </td><td class="mdescRight">Read in one 'packet' from the server. <a href="a00564.html#ga410619783bdf2bb60b0f27a5578e0e07">More...</a><br /></td></tr>
<tr class="separator:ga410619783bdf2bb60b0f27a5578e0e07"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gad7aae89e32444ab30852fee056231403"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#gad7aae89e32444ab30852fee056231403">tds_select</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, unsigned tds_sel, int timeout_seconds)</td></tr>
<tr class="memdesc:gad7aae89e32444ab30852fee056231403"><td class="mdescLeft"> </td><td class="mdescRight">Select on a socket until it's available or the timeout expires. <a href="a00564.html#gad7aae89e32444ab30852fee056231403">More...</a><br /></td></tr>
<tr class="separator:gad7aae89e32444ab30852fee056231403"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gab604dd1d75afa8f852d1a6ee0b681974"><td class="memItemLeft" align="right" valign="top">static TDSERRNO </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#gab604dd1d75afa8f852d1a6ee0b681974">tds_setup_socket</a> (TDS_SYS_SOCKET *p_sock, struct addrinfo *addr, unsigned int port, int *p_oserr)</td></tr>
<tr class="memdesc:gab604dd1d75afa8f852d1a6ee0b681974"><td class="mdescLeft"> </td><td class="mdescRight">Setup the socket and attempt a connection. <a href="a00564.html#gab604dd1d75afa8f852d1a6ee0b681974">More...</a><br /></td></tr>
<tr class="separator:gab604dd1d75afa8f852d1a6ee0b681974"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaa3d928726b3f0b53ec235be4b2ab1081"><td class="memItemLeft" align="right" valign="top"><a id="gaa3d928726b3f0b53ec235be4b2ab1081"></a>
void </td><td class="memItemRight" valign="bottom"><b>tds_socket_flush</b> (TDS_SYS_SOCKET sock)</td></tr>
<tr class="separator:gaa3d928726b3f0b53ec235be4b2ab1081"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga8560e2536fdcf8f1514d4fa14f90876c"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga8560e2536fdcf8f1514d4fa14f90876c">tds_socket_read</a> (<a class="el" href="a01231.html">TDSCONNECTION</a> *conn, <a class="el" href="a01235.html">TDSSOCKET</a> *tds, unsigned char *buf, int buflen)</td></tr>
<tr class="memdesc:ga8560e2536fdcf8f1514d4fa14f90876c"><td class="mdescLeft"> </td><td class="mdescRight">Read from an OS socket @TODO remove tds, save error somewhere, report error in another way. <a href="a00564.html#ga8560e2536fdcf8f1514d4fa14f90876c">More...</a><br /></td></tr>
<tr class="separator:ga8560e2536fdcf8f1514d4fa14f90876c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga2a7429ff031f77023d1bf31339a266db"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#ga2a7429ff031f77023d1bf31339a266db">tds_socket_set_nonblocking</a> (TDS_SYS_SOCKET sock)</td></tr>
<tr class="memdesc:ga2a7429ff031f77023d1bf31339a266db"><td class="mdescLeft"> </td><td class="mdescRight">Set socket to non-blocking. <a href="a00564.html#ga2a7429ff031f77023d1bf31339a266db">More...</a><br /></td></tr>
<tr class="separator:ga2a7429ff031f77023d1bf31339a266db"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gae36a2665a4183b4cb211d03e907112ee"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#gae36a2665a4183b4cb211d03e907112ee">tds_socket_set_nosigpipe</a> (TDS_SYS_SOCKET sock, int on)</td></tr>
<tr class="memdesc:gae36a2665a4183b4cb211d03e907112ee"><td class="mdescLeft"> </td><td class="mdescRight">Set socket to not throw SIGPIPE. <a href="a00564.html#gae36a2665a4183b4cb211d03e907112ee">More...</a><br /></td></tr>
<tr class="separator:gae36a2665a4183b4cb211d03e907112ee"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gad6f81b48fbcfc18ce0b213dbbea47e30"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#gad6f81b48fbcfc18ce0b213dbbea47e30">tds_socket_write</a> (<a class="el" href="a01231.html">TDSCONNECTION</a> *conn, <a class="el" href="a01235.html">TDSSOCKET</a> *tds, const unsigned char *buf, int buflen)</td></tr>
<tr class="memdesc:gad6f81b48fbcfc18ce0b213dbbea47e30"><td class="mdescLeft"> </td><td class="mdescRight">Write to an OS socket. <a href="a00564.html#gad6f81b48fbcfc18ce0b213dbbea47e30">More...</a><br /></td></tr>
<tr class="separator:gad6f81b48fbcfc18ce0b213dbbea47e30"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gad70d59fb317d098b0c9fd29dd77131a8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00564.html#gad70d59fb317d098b0c9fd29dd77131a8">tds_unget_byte</a> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds)</td></tr>
<tr class="memdesc:gad70d59fb317d098b0c9fd29dd77131a8"><td class="mdescLeft"> </td><td class="mdescRight">Unget will always work as long as you don't call it twice in a row. <a href="a00564.html#gad70d59fb317d098b0c9fd29dd77131a8">More...</a><br /></td></tr>
<tr class="separator:gad70d59fb317d098b0c9fd29dd77131a8"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga4d3c01404a49d438e186bf76e5aa3d72"><td class="memItemLeft" align="right" valign="top"><a id="ga4d3c01404a49d438e186bf76e5aa3d72"></a>
void </td><td class="memItemRight" valign="bottom"><b>tds_wakeup_close</b> (<a class="el" href="a01227.html">TDSPOLLWAKEUP</a> *wakeup)</td></tr>
<tr class="separator:ga4d3c01404a49d438e186bf76e5aa3d72"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga604300fba84677fe037dc0d41c7f16be"><td class="memItemLeft" align="right" valign="top"><a id="ga604300fba84677fe037dc0d41c7f16be"></a>
int </td><td class="memItemRight" valign="bottom"><b>tds_wakeup_init</b> (<a class="el" href="a01227.html">TDSPOLLWAKEUP</a> *wakeup)</td></tr>
<tr class="separator:ga604300fba84677fe037dc0d41c7f16be"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga04585addd44bb56a3513df536cb708e5"><td class="memItemLeft" align="right" valign="top"><a id="ga04585addd44bb56a3513df536cb708e5"></a>
void </td><td class="memItemRight" valign="bottom"><b>tds_wakeup_send</b> (<a class="el" href="a01227.html">TDSPOLLWAKEUP</a> *wakeup, char cancel)</td></tr>
<tr class="separator:ga04585addd44bb56a3513df536cb708e5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga5cee0591b01c0ea1700ddfcdad4edf46"><td class="memItemLeft" align="right" valign="top"><a id="ga5cee0591b01c0ea1700ddfcdad4edf46"></a>
TDSRET </td><td class="memItemRight" valign="bottom"><b>tds_write_packet</b> (<a class="el" href="a01235.html">TDSSOCKET</a> *tds, unsigned char final)</td></tr>
<tr class="separator:ga5cee0591b01c0ea1700ddfcdad4edf46"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Functions for reading or writing from network. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga676c4dee6522815b16fdc8e448e43590"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga676c4dee6522815b16fdc8e448e43590">◆ </a></span>read_and_convert()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static size_t read_and_convert </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00983.html">TDSICONV</a> * </td>
<td class="paramname"><em>char_conv</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t * </td>
<td class="paramname"><em>wire_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char * </td>
<td class="paramname"><em>outbuf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>outbytesleft</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>For UTF-8 and similar, <a class="el" href="a00561.html#ga87db49044919f1bc84c0ff5e9ab00304" title="Wrapper around iconv(3).">tds_iconv()</a> may encounter a partial sequence when the chunk boundary is not aligned with the character boundary. </p>
<p>In that event, it will return an error, and some number of bytes (less than a character) will remain in the tail end of temp[]. They are moved to the beginning, ptemp is adjusted to point just behind them, and the next chunk is read. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">tds</td><td>A pointer to the TDSSOCKET structure managing a client/server operation. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">char_conv</td><td>conversion structure </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">wire_size</td><td>size readed from wire </td></tr>
<tr><td class="paramdir"></td><td class="paramname">outbuf</td><td>buffer to write to </td></tr>
<tr><td class="paramdir"></td><td class="paramname">outbytesleft</td><td>buffer length </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>bytes readed </dd></dl>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 1 -->
</div>
</div>
</div>
</div>
<a id="gac23c12ccb3e8599f10f305e993e216f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac23c12ccb3e8599f10f305e993e216f6">◆ </a></span>tds7_get_instance_port()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int tds7_get_instance_port </td>
<td>(</td>
<td class="paramtype">struct addrinfo * </td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char * </td>
<td class="paramname"><em>instance</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get port of given instance. </p>
<dl class="section return"><dt>Returns</dt><dd>port number or 0 if error </dd></dl>
</div>
</div>
<a id="ga954dcc3b0332fa9448d9edf59c0fe439"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga954dcc3b0332fa9448d9edf59c0fe439">◆ </a></span>tds7_get_instance_ports()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int tds7_get_instance_ports </td>
<td>(</td>
<td class="paramtype">FILE * </td>
<td class="paramname"><em>output</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct addrinfo * </td>
<td class="paramname"><em>addr</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get port of all instances. </p>
<dl class="section return"><dt>Returns</dt><dd>default port number or 0 if error </dd></dl>
<dl class="section remark"><dt>Remarks</dt><dd>experimental, cf. MC-SQLR.pdf. </dd></dl>
</div>
</div>
<a id="ga3e3f76009fce5ceedb2f42bb2c9aed2e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3e3f76009fce5ceedb2f42bb2c9aed2e">◆ </a></span>tds_close_socket()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tds_close_socket </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Close current socket. </p>
<p>For last socket close entire connection. For MARS send FIN request. This attempts a graceful disconnection, for ungraceful call tds_connection_close. </p>
</div>
</div>
<a id="gafae08056186b143f3ef1399307dc9be7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafae08056186b143f3ef1399307dc9be7">◆ </a></span>tds_dstr_get()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00566.html#gafddddf5bd7ad223cadee3d3bdc899954">DSTR</a>* tds_dstr_get </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00566.html#gafddddf5bd7ad223cadee3d3bdc899954">DSTR</a> * </td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>len</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads a string from wire and put in a DSTR. </p>
<p>On error we read the bytes from the wire anyway. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">tds</td><td>A pointer to the TDSSOCKET structure managing a client/server operation. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">s</td><td>output string </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>string length (in characters) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>string or NULL on error </dd></dl>
</div>
</div>
<a id="ga5feb53554e8917a81bbbc332163a61fb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5feb53554e8917a81bbbc332163a61fb">◆ </a></span>tds_flush_packet()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">TDSRET tds_flush_packet </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Flush packet to server. </p>
<dl class="section return"><dt>Returns</dt><dd>TDS_FAIL or TDS_SUCCESS </dd></dl>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 2 -->
</div>
</div>
</div>
</div>
<a id="ga6b2b012b999bd0a4f159fabc8d11a5bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6b2b012b999bd0a4f159fabc8d11a5bf">◆ </a></span>tds_freeze()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="a01243.html">tds_freeze</a> </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a01243.html">TDSFREEZE</a> * </td>
<td class="paramname"><em>freeze</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned </td>
<td class="paramname"><em>size_len</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Stop writing to server and cache every packet not sending them to server. </p>
<p>This is used to write data without worrying to compute length before. If size_len is provided the number of bytes written between <a class="el" href="a01243.html">tds_freeze</a> and <a class="el" href="a00564.html#ga633f62fb8e5310abfa42c02fba9c6500" title="Stop keeping data for this specific freeze.">tds_freeze_close</a> will be written as a number of size size_len. This call should be followed by a <a class="el" href="a00564.html#ga633f62fb8e5310abfa42c02fba9c6500" title="Stop keeping data for this specific freeze.">tds_freeze_close</a>, <a class="el" href="a00564.html#ga2660b893ae2bf36fe1b63b354e748bad" title="Stop keeping data for this specific freeze.">tds_freeze_close_len</a> or a <a class="el" href="a00564.html#ga7274d9c5dc75c58bb7d1f1c29e03a73e" title="Discard all data written after the freeze.">tds_freeze_abort</a>. Failing to match <a class="el" href="a01243.html">tds_freeze</a> with a close would possibly result in a disconnection from the server.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">freeze</td><td>structure to initialize </td></tr>
<tr><td class="paramdir"></td><td class="paramname">size_len</td><td>length of the size to automatically write on close (0, 1, 2, or 4) </td></tr>
</table>
</dd>
</dl>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 3 -->
</div>
</div>
</div>
</div>
<a id="ga7274d9c5dc75c58bb7d1f1c29e03a73e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7274d9c5dc75c58bb7d1f1c29e03a73e">◆ </a></span>tds_freeze_abort()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">TDSRET tds_freeze_abort </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01243.html">TDSFREEZE</a> * </td>
<td class="paramname"><em>freeze</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Discard all data written after the freeze. </p>
<p>After this call freeze should not be used.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">freeze</td><td>structure to work on </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga633f62fb8e5310abfa42c02fba9c6500"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga633f62fb8e5310abfa42c02fba9c6500">◆ </a></span>tds_freeze_close()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">TDSRET tds_freeze_close </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01243.html">TDSFREEZE</a> * </td>
<td class="paramname"><em>freeze</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Stop keeping data for this specific freeze. </p>
<p>If size_len was used for <a class="el" href="a01243.html">tds_freeze</a> this function write the written bytes at position when <a class="el" href="a01243.html">tds_freeze</a> was called. After this call freeze should not be used.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">freeze</td><td>structure to work on </td></tr>
</table>
</dd>
</dl>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 4 -->
</div>
</div>
</div>
</div>
<a id="ga2660b893ae2bf36fe1b63b354e748bad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2660b893ae2bf36fe1b63b354e748bad">◆ </a></span>tds_freeze_close_len()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">TDSRET tds_freeze_close_len </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01243.html">TDSFREEZE</a> * </td>
<td class="paramname"><em>freeze</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int32_t </td>
<td class="paramname"><em>size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Stop keeping data for this specific freeze. </p>
<p>Similar to <a class="el" href="a00564.html#ga633f62fb8e5310abfa42c02fba9c6500" title="Stop keeping data for this specific freeze.">tds_freeze_close</a> but specify the size to be written instead of letting <a class="el" href="a00564.html#ga633f62fb8e5310abfa42c02fba9c6500" title="Stop keeping data for this specific freeze.">tds_freeze_close</a> compute it. After this call freeze should not be used.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">freeze</td><td>structure to work on </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>size to write </td></tr>
</table>
</dd>
</dl>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 5 -->
</div>
</div>
</div>
</div>
<a id="ga528cc96da09c11bc2930daae64e33e83"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga528cc96da09c11bc2930daae64e33e83">◆ </a></span>tds_freeze_written()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">size_t tds_freeze_written </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01243.html">TDSFREEZE</a> * </td>
<td class="paramname"><em>freeze</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Compute how many bytes has been written from freeze. </p>
<dl class="section return"><dt>Returns</dt><dd>bytes written since <a class="el" href="a01243.html">tds_freeze</a> call </dd></dl>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 6 -->
</div>
</div>
</div>
</div>
<a id="ga0cb72d3f6943795c39db1fa692be0a58"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0cb72d3f6943795c39db1fa692be0a58">◆ </a></span>tds_get_byte()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char tds_get_byte </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Return a single byte from the input buffer. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tds</td><td>A pointer to the TDSSOCKET structure managing a client/server operation. </td></tr>
</table>
</dd>
</dl>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 7 -->
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 8 -->
</div>
</div>
</div>
</div>
<a id="ga8d214089b6e97fc0da5e0be09f216d73"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8d214089b6e97fc0da5e0be09f216d73">◆ </a></span>tds_get_char_data()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">TDSRET tds_get_char_data </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char * </td>
<td class="paramname"><em>row_buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>wire_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a01175.html">TDSCOLUMN</a> * </td>
<td class="paramname"><em>curcol</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Fetch character data the wire. </p>
<p>Output is NOT null terminated. If <em>char_conv</em> is not NULL, convert data accordingly. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tds</td><td>state information for the socket and the TDS protocol </td></tr>
<tr><td class="paramname">row_buffer</td><td>destination buffer in current_row. Can't be NULL </td></tr>
<tr><td class="paramname">wire_size</td><td>size to read from wire (in bytes) </td></tr>
<tr><td class="paramname">curcol</td><td>column information </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>TDS_SUCCESS or TDS_FAIL (probably memory error on text data) </dd></dl>
</div>
</div>
<a id="gae777dd57e8d1bb40349d7d7d8434fddf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae777dd57e8d1bb40349d7d7d8434fddf">◆ </a></span>tds_get_n()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool tds_get_n </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>dest</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>need</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get N bytes from the buffer and return them in the already allocated space <br />
given to us. </p>
<p>We ASSUME that the person calling this function has done the <br />
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="#" onclick="location.href='mai'+'lto:'+'tet'+'he'+'row'+'@n'+'ol.'+'or'+'g'; return false;">tethe<span style="display: none;">.nosp@m.</span>row@<span style="display: none;">.nosp@m.</span>nol.o<span style="display: none;">.nosp@m.</span>rg</a>) </p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 9 -->
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 10 -->
</div>
</div>
</div>
</div>
<a id="ga90f080e6e9448feac15dee1370d66802"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga90f080e6e9448feac15dee1370d66802">◆ </a></span>tds_get_string()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">size_t tds_get_string </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>string_len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char * </td>
<td class="paramname"><em>dest</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>dest_size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Fetch a string from the wire. </p>
<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) </p><dl class="section return"><dt>Returns</dt><dd>bytes written to <em>dest</em> </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tds</td><td>connection information </td></tr>
<tr><td class="paramname">string_len</td><td>length of string to read from wire (in server characters, bytes for tds4-tds5, ucs2 for tds7+) </td></tr>
<tr><td class="paramname">dest</td><td>destination buffer, if NULL string is read and discarded </td></tr>
<tr><td class="paramname">dest_size</td><td>destination buffer size, in bytes </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga9ac121c269e203337a48c5bf8afc48c3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9ac121c269e203337a48c5bf8afc48c3">◆ </a></span>tds_get_uint()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">TDS_UINT tds_get_uint </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get an int32 from the server. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tds</td><td>A pointer to the TDSSOCKET structure managing a client/server operation. </td></tr>
</table>
</dd>
</dl>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 11 -->
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 12 -->
</div>
</div>
</div>
</div>
<a id="ga8ab6c87318eaf15ea17a9575763f7809"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8ab6c87318eaf15ea17a9575763f7809">◆ </a></span>tds_get_uint8()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">TDS_UINT8 tds_get_uint8 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get an uint64 from the server. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tds</td><td>A pointer to the TDSSOCKET structure managing a client/server operation. </td></tr>
</table>
</dd>
</dl>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 13 -->
</div>
</div>
</div>
</div>
<a id="ga2734407109c834c5dda7ff8a45c71230"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2734407109c834c5dda7ff8a45c71230">◆ </a></span>tds_goodwrite()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int tds_goodwrite </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char * </td>
<td class="paramname"><em>buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t </td>
<td class="paramname"><em>buflen</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tds</td><td>the famous socket </td></tr>
<tr><td class="paramname">buffer</td><td>data to send </td></tr>
<tr><td class="paramname">buflen</td><td>bytes in buffer </td></tr>
<tr><td class="paramname">last</td><td>1 if this is the last packet, else 0 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>length written (>0), <0 on failure </dd></dl>
</div>
</div>
<a id="ga221e98a9c8be96ec6c8547891e1b53af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga221e98a9c8be96ec6c8547891e1b53af">◆ </a></span>tds_peek()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char tds_peek </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads a byte from the TDS stream without removing it. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tds</td><td>A pointer to the TDSSOCKET structure managing a client/server operation. </td></tr>
</table>
</dd>
</dl>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 14 -->
</div>
</div>
</div>
</div>
<a id="ga1fcaf8d488cc1390f106ce3ad0bf37b4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1fcaf8d488cc1390f106ce3ad0bf37b4">◆ </a></span>tds_put_string()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int tds_put_string </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char * </td>
<td class="paramname"><em>s</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>len</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Output a string to wire automatic translate string to unicode if needed. </p>
<dl class="section return"><dt>Returns</dt><dd>bytes written to wire </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tds</td><td>state information for the socket and the TDS protocol </td></tr>
<tr><td class="paramname">s</td><td>string to write </td></tr>
<tr><td class="paramname">len</td><td>length of string in characters, or -1 for null terminated </td></tr>
</table>
</dd>
</dl>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 15 -->
</div>
</div>
</div>
</div>
<a id="ga410619783bdf2bb60b0f27a5578e0e07"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga410619783bdf2bb60b0f27a5578e0e07">◆ </a></span>tds_read_packet()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int tds_read_packet </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Read in one 'packet' from the server. </p>
<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) </p><dl class="section return"><dt>Returns</dt><dd>bytes read or -1 on failure </dd></dl>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 16 -->
</div>
</div>
</div>
</div>
<a id="gad7aae89e32444ab30852fee056231403"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad7aae89e32444ab30852fee056231403">◆ </a></span>tds_select()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int tds_select </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned </td>
<td class="paramname"><em>tds_sel</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>timeout_seconds</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Select on a socket until it's available or the timeout expires. </p>
<p>Meanwhile, call the interrupt function. </p><dl class="section return"><dt>Returns</dt><dd>>0 ready descriptors 0 timeout <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. <br />
</dd></dl>
</div>
</div>
<a id="gab604dd1d75afa8f852d1a6ee0b681974"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab604dd1d75afa8f852d1a6ee0b681974">◆ </a></span>tds_setup_socket()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static TDSERRNO tds_setup_socket </td>
<td>(</td>
<td class="paramtype">TDS_SYS_SOCKET * </td>
<td class="paramname"><em>p_sock</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">struct addrinfo * </td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int </td>
<td class="paramname"><em>port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>p_oserr</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Setup the socket and attempt a connection. </p>
<p>Function allocate the socket in *p_sock and try to start a connection. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">p_sock</td><td>where returned socket is stored. Socket is stored even on error. Can be INVALID_SOCKET. </td></tr>
<tr><td class="paramname">addr</td><td>address to use for attempting the connection </td></tr>
<tr><td class="paramname">port</td><td>port to connect to </td></tr>
<tr><td class="paramname">p_oserr</td><td>where system error is returned </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>TDSEOK is success, TDSEINPROGRESS if connection attempt is started or any other error. </dd></dl>
</div>
</div>
<a id="ga8560e2536fdcf8f1514d4fa14f90876c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8560e2536fdcf8f1514d4fa14f90876c">◆ </a></span>tds_socket_read()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static int tds_socket_read </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01231.html">TDSCONNECTION</a> * </td>
<td class="paramname"><em>conn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned char * </td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>buflen</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Read from an OS socket @TODO remove tds, save error somewhere, report error in another way. </p>
<dl class="section return"><dt>Returns</dt><dd>0 if blocking, <0 error >0 bytes read </dd></dl>
</div>
</div>
<a id="ga2a7429ff031f77023d1bf31339a266db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2a7429ff031f77023d1bf31339a266db">◆ </a></span>tds_socket_set_nonblocking()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int tds_socket_set_nonblocking </td>
<td>(</td>
<td class="paramtype">TDS_SYS_SOCKET </td>
<td class="paramname"><em>sock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set socket to non-blocking. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">sock</td><td>socket to set </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success or error code </dd></dl>
</div>
</div>
<a id="gae36a2665a4183b4cb211d03e907112ee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae36a2665a4183b4cb211d03e907112ee">◆ </a></span>tds_socket_set_nosigpipe()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int tds_socket_set_nosigpipe </td>
<td>(</td>
<td class="paramtype">TDS_SYS_SOCKET </td>
<td class="paramname"><em>sock</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>on</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set socket to not throw SIGPIPE. </p>
<p>Not many systems support this feature (in this case ENOTSUP can be returned). </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">sock</td><td>socket to set </td></tr>
<tr><td class="paramname">on</td><td>flag if enable or disable </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success or error code </dd></dl>
</div>
</div>
<a id="gad6f81b48fbcfc18ce0b213dbbea47e30"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad6f81b48fbcfc18ce0b213dbbea47e30">◆ </a></span>tds_socket_write()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static int tds_socket_write </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01231.html">TDSCONNECTION</a> * </td>
<td class="paramname"><em>conn</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const unsigned char * </td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>buflen</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Write to an OS socket. </p>
<dl class="section return"><dt>Returns</dt><dd>0 if blocking, <0 error >0 bytes readed </dd></dl>
</div>
</div>
<a id="gad70d59fb317d098b0c9fd29dd77131a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad70d59fb317d098b0c9fd29dd77131a8">◆ </a></span>tds_unget_byte()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tds_unget_byte </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a01235.html">TDSSOCKET</a> * </td>
<td class="paramname"><em>tds</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Unget will always work as long as you don't call it twice in a row. </p>
<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. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tds</td><td>A pointer to the TDSSOCKET structure managing a client/server operation. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20
</small></address>
</body>
</html>