blob: 5443f8d8a58d865bbd05adee36d0dfc14e4336b1 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>libguac: guacamole/socket.h File Reference</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/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</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 style="padding-left: 0.5em;">
<div id="projectname">libguac
&#160;<span id="projectnumber">0.9.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Macros</a></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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_6bb9fad85c98b48a11165f494b9f53ce.html">guacamole</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">socket.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Defines the <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object and functionss for using and manipulating it.
<a href="#details">More...</a></p>
<p><a href="socket_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structguac__socket.html">guac_socket</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The core I/O object of Guacamole. <a href="structguac__socket.html#details">More...</a><br/></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:af93053e27466c566624301d7b32a68c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af93053e27466c566624301d7b32a68c3"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#af93053e27466c566624301d7b32a68c3">GUAC_SOCKET_OUTPUT_BUFFER_SIZE</a>&#160;&#160;&#160;8192</td></tr>
<tr class="memdesc:af93053e27466c566624301d7b32a68c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of bytes to buffer within each socket before flushing. <br/></td></tr>
<tr class="memitem:aa8820e76e3d3471bdc8771591ebf29f7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8820e76e3d3471bdc8771591ebf29f7"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#aa8820e76e3d3471bdc8771591ebf29f7">GUAC_SOCKET_KEEP_ALIVE_INTERVAL</a>&#160;&#160;&#160;5000</td></tr>
<tr class="memdesc:aa8820e76e3d3471bdc8771591ebf29f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of milliseconds to wait between keep-alive pings on a socket with keep-alive enabled. <br/></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a75396c8cb7b0ba91102fcd447a1eb36b"><td class="memItemLeft" align="right" valign="top">typedef ssize_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a75396c8cb7b0ba91102fcd447a1eb36b">guac_socket_read_handler</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, void *buf, size_t count)</td></tr>
<tr class="memdesc:a75396c8cb7b0ba91102fcd447a1eb36b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generic read handler for socket read operations, modeled after the standard POSIX read() function. <a href="#a75396c8cb7b0ba91102fcd447a1eb36b"></a><br/></td></tr>
<tr class="memitem:a7198af0a6bbac52794eb248c81d90c6a"><td class="memItemLeft" align="right" valign="top">typedef ssize_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a7198af0a6bbac52794eb248c81d90c6a">guac_socket_write_handler</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, const void *buf, size_t count)</td></tr>
<tr class="memdesc:a7198af0a6bbac52794eb248c81d90c6a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generic write handler for socket write operations, modeled after the standard POSIX write() function. <a href="#a7198af0a6bbac52794eb248c81d90c6a"></a><br/></td></tr>
<tr class="memitem:a934350207615e0e2066954f9484153f8"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a934350207615e0e2066954f9484153f8">guac_socket_select_handler</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, int usec_timeout)</td></tr>
<tr class="memdesc:a934350207615e0e2066954f9484153f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generic handler for socket select operations, similar to the POSIX select() function. <a href="#a934350207615e0e2066954f9484153f8"></a><br/></td></tr>
<tr class="memitem:a9700a8ba2011d6e6ce13e3e6c6397fc2"><td class="memItemLeft" align="right" valign="top">typedef int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a9700a8ba2011d6e6ce13e3e6c6397fc2">guac_socket_free_handler</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket)</td></tr>
<tr class="memdesc:a9700a8ba2011d6e6ce13e3e6c6397fc2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generic handler for the closing of a socket, modeled after the standard POSIX close() function. <a href="#a9700a8ba2011d6e6ce13e3e6c6397fc2"></a><br/></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:a0ac0c0cd123b57d8aba5e6ec6fd20939"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a0ac0c0cd123b57d8aba5e6ec6fd20939">guac_socket_state</a> { <a class="el" href="socket_8h.html#a0ac0c0cd123b57d8aba5e6ec6fd20939a7b8a48d941303b384b59a8203a801dc5">GUAC_SOCKET_OPEN</a>,
<a class="el" href="socket_8h.html#a0ac0c0cd123b57d8aba5e6ec6fd20939a02f70c652aab0536f0504d413560766e">GUAC_SOCKET_CLOSED</a>
}</td></tr>
<tr class="memdesc:a0ac0c0cd123b57d8aba5e6ec6fd20939"><td class="mdescLeft">&#160;</td><td class="mdescRight">Possible current states of a <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a>. <a href="socket_8h.html#a0ac0c0cd123b57d8aba5e6ec6fd20939">More...</a><br/></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a7e5859b812923b894779f59353fdadb4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a7e5859b812923b894779f59353fdadb4">guac_socket_alloc</a> ()</td></tr>
<tr class="memdesc:a7e5859b812923b894779f59353fdadb4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates a new, completely blank <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a>. <a href="#a7e5859b812923b894779f59353fdadb4"></a><br/></td></tr>
<tr class="memitem:a376df8efcc02a7104504f104433884ed"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a376df8efcc02a7104504f104433884ed">guac_socket_free</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket)</td></tr>
<tr class="memdesc:a376df8efcc02a7104504f104433884ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> and all associated resources. <a href="#a376df8efcc02a7104504f104433884ed"></a><br/></td></tr>
<tr class="memitem:aeb3104545c207780ea6419e22a9afacd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#aeb3104545c207780ea6419e22a9afacd">guac_socket_require_threadsafe</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket)</td></tr>
<tr class="memdesc:aeb3104545c207780ea6419e22a9afacd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Declares that the given socket must behave in a threadsafe way. <a href="#aeb3104545c207780ea6419e22a9afacd"></a><br/></td></tr>
<tr class="memitem:a1d8c5111a8234c7785ae23f379f7db03"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a1d8c5111a8234c7785ae23f379f7db03">guac_socket_require_keep_alive</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket)</td></tr>
<tr class="memdesc:a1d8c5111a8234c7785ae23f379f7db03"><td class="mdescLeft">&#160;</td><td class="mdescRight">Declares that the given socket must automatically send a keep-alive ping to ensure neither side of the socket times out while the socket is open. <a href="#a1d8c5111a8234c7785ae23f379f7db03"></a><br/></td></tr>
<tr class="memitem:a00c8f00ab54c42e42c9f489caf5478b1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a00c8f00ab54c42e42c9f489caf5478b1">guac_socket_instruction_begin</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket)</td></tr>
<tr class="memdesc:a00c8f00ab54c42e42c9f489caf5478b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marks the beginning of a Guacamole protocol instruction. <a href="#a00c8f00ab54c42e42c9f489caf5478b1"></a><br/></td></tr>
<tr class="memitem:a603c23b24e2e2e95eeb2ce08d8115e94"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a603c23b24e2e2e95eeb2ce08d8115e94">guac_socket_instruction_end</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket)</td></tr>
<tr class="memdesc:a603c23b24e2e2e95eeb2ce08d8115e94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marks the end of a Guacamole protocol instruction. <a href="#a603c23b24e2e2e95eeb2ce08d8115e94"></a><br/></td></tr>
<tr class="memitem:ab66a1297bd3cba594e8a3236bfe79d0b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#ab66a1297bd3cba594e8a3236bfe79d0b">guac_socket_update_buffer_begin</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket)</td></tr>
<tr class="memdesc:ab66a1297bd3cba594e8a3236bfe79d0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marks the beginning of a socket's buffer modification. <a href="#ab66a1297bd3cba594e8a3236bfe79d0b"></a><br/></td></tr>
<tr class="memitem:a6f6906ebb9a3fdb77ea9516071dcbfc7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a6f6906ebb9a3fdb77ea9516071dcbfc7">guac_socket_update_buffer_end</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket)</td></tr>
<tr class="memdesc:a6f6906ebb9a3fdb77ea9516071dcbfc7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marks the end of a socket's buffer modification. <a href="#a6f6906ebb9a3fdb77ea9516071dcbfc7"></a><br/></td></tr>
<tr class="memitem:a076f62b9b6082260462e18ca77c64e7a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a076f62b9b6082260462e18ca77c64e7a">guac_socket_open</a> (int fd)</td></tr>
<tr class="memdesc:a076f62b9b6082260462e18ca77c64e7a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates and initializes a new <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object with the given open file descriptor. <a href="#a076f62b9b6082260462e18ca77c64e7a"></a><br/></td></tr>
<tr class="memitem:af23ab23c93eb09eac0e15a87f5690bda"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#af23ab23c93eb09eac0e15a87f5690bda">guac_socket_nest</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *parent, int index)</td></tr>
<tr class="memdesc:af23ab23c93eb09eac0e15a87f5690bda"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates and initializes a new <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> which writes all data via nest instructions to the given existing, open <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a>. <a href="#af23ab23c93eb09eac0e15a87f5690bda"></a><br/></td></tr>
<tr class="memitem:a57a963e37377de2104c2d785980ff400"><td class="memItemLeft" align="right" valign="top">ssize_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a57a963e37377de2104c2d785980ff400">guac_socket_write_int</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, int64_t i)</td></tr>
<tr class="memdesc:a57a963e37377de2104c2d785980ff400"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes the given unsigned int to the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object. <a href="#a57a963e37377de2104c2d785980ff400"></a><br/></td></tr>
<tr class="memitem:ad0cb48c7896361b522ae5a222a3b5efc"><td class="memItemLeft" align="right" valign="top">ssize_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#ad0cb48c7896361b522ae5a222a3b5efc">guac_socket_write_string</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, const char *str)</td></tr>
<tr class="memdesc:ad0cb48c7896361b522ae5a222a3b5efc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes the given string to the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object. <a href="#ad0cb48c7896361b522ae5a222a3b5efc"></a><br/></td></tr>
<tr class="memitem:ac7ec68bc42436ba316805718c292c510"><td class="memItemLeft" align="right" valign="top">ssize_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#ac7ec68bc42436ba316805718c292c510">guac_socket_write_base64</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, const void *buf, size_t count)</td></tr>
<tr class="memdesc:ac7ec68bc42436ba316805718c292c510"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes the given binary data to the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object as base64- encoded data. <a href="#ac7ec68bc42436ba316805718c292c510"></a><br/></td></tr>
<tr class="memitem:adb6eb960de27526bc96e1f9af797e2c4"><td class="memItemLeft" align="right" valign="top">ssize_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#adb6eb960de27526bc96e1f9af797e2c4">guac_socket_write</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, const void *buf, size_t count)</td></tr>
<tr class="memdesc:adb6eb960de27526bc96e1f9af797e2c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes the given data to the specified socket. <a href="#adb6eb960de27526bc96e1f9af797e2c4"></a><br/></td></tr>
<tr class="memitem:af5d6846212d792c5bce7f8a4fd46cd31"><td class="memItemLeft" align="right" valign="top">ssize_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#af5d6846212d792c5bce7f8a4fd46cd31">guac_socket_read</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, void *buf, size_t count)</td></tr>
<tr class="memdesc:af5d6846212d792c5bce7f8a4fd46cd31"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempts to read data from the socket, filling up to the specified number of bytes in the given buffer. <a href="#af5d6846212d792c5bce7f8a4fd46cd31"></a><br/></td></tr>
<tr class="memitem:a09d5f60d75c57640a4c483d42445c1ab"><td class="memItemLeft" align="right" valign="top">ssize_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a09d5f60d75c57640a4c483d42445c1ab">guac_socket_flush_base64</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket)</td></tr>
<tr class="memdesc:a09d5f60d75c57640a4c483d42445c1ab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flushes the base64 buffer, writing padding characters as necessary. <a href="#a09d5f60d75c57640a4c483d42445c1ab"></a><br/></td></tr>
<tr class="memitem:ababc834d5812e006b55a79da417bfe12"><td class="memItemLeft" align="right" valign="top">ssize_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#ababc834d5812e006b55a79da417bfe12">guac_socket_flush</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket)</td></tr>
<tr class="memdesc:ababc834d5812e006b55a79da417bfe12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flushes the write buffer. <a href="#ababc834d5812e006b55a79da417bfe12"></a><br/></td></tr>
<tr class="memitem:a41b0d7a25ccda3d0ae20143880cf53b7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="socket_8h.html#a41b0d7a25ccda3d0ae20143880cf53b7">guac_socket_select</a> (<a class="el" href="structguac__socket.html">guac_socket</a> *socket, int usec_timeout)</td></tr>
<tr class="memdesc:a41b0d7a25ccda3d0ae20143880cf53b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Waits for input to be available on the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object until the specified timeout elapses. <a href="#a41b0d7a25ccda3d0ae20143880cf53b7"></a><br/></td></tr>
</table>
<a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>Defines the <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object and functionss for using and manipulating it. </p>
</div><h2>Typedef Documentation</h2>
<a class="anchor" id="a9700a8ba2011d6e6ce13e3e6c6397fc2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_socket_free_handler(<a class="el" href="structguac__socket.html">guac_socket</a> *socket)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic handler for the closing of a socket, modeled after the standard POSIX close() function. </p>
<p>When set within a <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a>, a handler of this type will be called when the socket is closed.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> being closed. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero on success, or -1 if an error occurs. </dd></dl>
</div>
</div>
<a class="anchor" id="a75396c8cb7b0ba91102fcd447a1eb36b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef ssize_t guac_socket_read_handler(<a class="el" href="structguac__socket.html">guac_socket</a> *socket, void *buf, size_t count)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic read handler for socket read operations, modeled after the standard POSIX read() function. </p>
<p>When set within a <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a>, a handler of this type will be called when data needs to be read into the socket.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> being read from. </td></tr>
<tr><td class="paramname">buf</td><td>The arbitrary buffer we must populate with data. </td></tr>
<tr><td class="paramname">count</td><td>The maximum number of bytes to read into the buffer. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The number of bytes read, or -1 if an error occurs. </dd></dl>
</div>
</div>
<a class="anchor" id="a934350207615e0e2066954f9484153f8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef int guac_socket_select_handler(<a class="el" href="structguac__socket.html">guac_socket</a> *socket, int usec_timeout)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic handler for socket select operations, similar to the POSIX select() function. </p>
<p>When <a class="el" href="socket_8h.html#a41b0d7a25ccda3d0ae20143880cf53b7" title="Waits for input to be available on the given guac_socket object until the specified timeout elapses...">guac_socket_select()</a> is called on a <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a>, its guac_socket_select_handler will be invoked, if defined.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> being selected. </td></tr>
<tr><td class="paramname">usec_timeout</td><td>The maximum number of microseconds to wait for data, or -1 to potentially wait forever. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Positive on success, zero if the timeout elapsed and no data is available, negative on error. </dd></dl>
</div>
</div>
<a class="anchor" id="a7198af0a6bbac52794eb248c81d90c6a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef ssize_t guac_socket_write_handler(<a class="el" href="structguac__socket.html">guac_socket</a> *socket, const void *buf, size_t count)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic write handler for socket write operations, modeled after the standard POSIX write() function. </p>
<p>When set within a <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a>, a handler of this type will be called when data needs to be write into the socket.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> being written to. </td></tr>
<tr><td class="paramname">buf</td><td>The arbitrary buffer containing data to be written. </td></tr>
<tr><td class="paramname">count</td><td>The maximum number of bytes to write from the buffer. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The number of bytes written, or -1 if an error occurs. </dd></dl>
</div>
</div>
<h2>Enumeration Type Documentation</h2>
<a class="anchor" id="a0ac0c0cd123b57d8aba5e6ec6fd20939"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="socket_8h.html#a0ac0c0cd123b57d8aba5e6ec6fd20939">guac_socket_state</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Possible current states of a <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a>. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="a0ac0c0cd123b57d8aba5e6ec6fd20939a7b8a48d941303b384b59a8203a801dc5"></a>GUAC_SOCKET_OPEN</em>&nbsp;</td><td>
<p>The socket is open and can be written to / read from. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a0ac0c0cd123b57d8aba5e6ec6fd20939a02f70c652aab0536f0504d413560766e"></a>GUAC_SOCKET_CLOSED</em>&nbsp;</td><td>
<p>The socket is closed. </p>
<p>Reads and writes will fail. </p>
</td></tr>
</table>
</dd>
</dl>
</div>
</div>
<h2>Function Documentation</h2>
<a class="anchor" id="a7e5859b812923b894779f59353fdadb4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structguac__socket.html">guac_socket</a>* guac_socket_alloc </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocates a new, completely blank <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a>. </p>
<p>This <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> will do absolutely nothing when used unless its handlers are defined.</p>
<dl class="section return"><dt>Returns</dt><dd>A newly-allocated <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a>, or NULL if the <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> could not be allocated. </dd></dl>
</div>
</div>
<a class="anchor" id="ababc834d5812e006b55a79da417bfe12"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ssize_t guac_socket_flush </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Flushes the write buffer. </p>
<p>If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object to flush </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero on success, or non-zero if an error occurs during flush. </dd></dl>
</div>
</div>
<a class="anchor" id="a09d5f60d75c57640a4c483d42445c1ab"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ssize_t guac_socket_flush_base64 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Flushes the base64 buffer, writing padding characters as necessary. </p>
<p>If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object to flush </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero on success, or non-zero if an error occurs during flush. </dd></dl>
</div>
</div>
<a class="anchor" id="a376df8efcc02a7104504f104433884ed"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_socket_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Frees the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> and all associated resources. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> to free. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a00c8f00ab54c42e42c9f489caf5478b1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_socket_instruction_begin </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Marks the beginning of a Guacamole protocol instruction. </p>
<p>If threadsafety is enabled on the socket, other instructions will be blocked from sending until this instruction is complete.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> beginning an instruction. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a603c23b24e2e2e95eeb2ce08d8115e94"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_socket_instruction_end </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Marks the end of a Guacamole protocol instruction. </p>
<p>If threadsafety is enabled on the socket, other instructions will be allowed to send.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> ending an instruction. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="af23ab23c93eb09eac0e15a87f5690bda"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structguac__socket.html">guac_socket</a>* guac_socket_nest </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>parent</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>index</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocates and initializes a new <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> which writes all data via nest instructions to the given existing, open <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a>. </p>
<p>If an error occurs while allocating the <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object, NULL is returned, and guac_error is set appropriately.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">parent</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> this new <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> should write nest instructions to. </td></tr>
<tr><td class="paramname">index</td><td>The stream index to use for the written nest instructions. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A newly allocated <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object associated with the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> and stream index, or NULL if an error occurs while allocating the <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object. </dd></dl>
</div>
</div>
<a class="anchor" id="a076f62b9b6082260462e18ca77c64e7a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structguac__socket.html">guac_socket</a>* guac_socket_open </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>fd</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocates and initializes a new <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object with the given open file descriptor. </p>
<p>If an error occurs while allocating the <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object, NULL is returned, and guac_error is set appropriately.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">fd</td><td>An open file descriptor that this <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object should manage. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A newly allocated <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object associated with the given file descriptor, or NULL if an error occurs while allocating the <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object. </dd></dl>
</div>
</div>
<a class="anchor" id="af5d6846212d792c5bce7f8a4fd46cd31"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ssize_t guac_socket_read </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Attempts to read data from the socket, filling up to the specified number of bytes in the given buffer. </p>
<p>If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> to read from. </td></tr>
<tr><td class="paramname">buf</td><td>The buffer to read bytes into. </td></tr>
<tr><td class="paramname">count</td><td>The maximum number of bytes to read. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The number of bytes read, or non-zero if an error occurs while reading. </dd></dl>
</div>
</div>
<a class="anchor" id="a1d8c5111a8234c7785ae23f379f7db03"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_socket_require_keep_alive </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Declares that the given socket must automatically send a keep-alive ping to ensure neither side of the socket times out while the socket is open. </p>
<p>This ping will take the form of a "nop" instruction. Enabling keep-alive automatically enables threadsafety.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> to declare as requiring an automatic keep-alive ping. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="aeb3104545c207780ea6419e22a9afacd"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_socket_require_threadsafe </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Declares that the given socket must behave in a threadsafe way. </p>
<p>Calling this function on a socket guarantees that the socket will send instructions atomically. Without automatic threadsafe sockets, multiple threads writing to the same socket must ensure that instructions will not potentially overlap.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> to declare as threadsafe. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a41b0d7a25ccda3d0ae20143880cf53b7"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int guac_socket_select </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>usec_timeout</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Waits for input to be available on the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object until the specified timeout elapses. </p>
<p>If an error occurs while waiting, a negative value is returned, and guac_error is set appropriately.</p>
<p>If a timeout occurs while waiting, zero value is returned, and guac_error is set to GUAC_STATUS_INPUT_TIMEOUT.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object to wait for. </td></tr>
<tr><td class="paramname">usec_timeout</td><td>The maximum number of microseconds to wait for data, or -1 to potentially wait forever. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Positive on success, zero if the timeout elapsed and no data is available, negative on error. </dd></dl>
</div>
</div>
<a class="anchor" id="ab66a1297bd3cba594e8a3236bfe79d0b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_socket_update_buffer_begin </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Marks the beginning of a socket's buffer modification. </p>
<p>If threadsafety is enabled on the socket, other functions which modify the buffer will be blocked until this modification is complete.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> whose buffer is being updated. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a6f6906ebb9a3fdb77ea9516071dcbfc7"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void guac_socket_update_buffer_end </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Marks the end of a socket's buffer modification. </p>
<p>If threadsafety is enabled on the socket, other functions which modify the buffer will now be allowed to continue.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> whose buffer is done being updated. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="adb6eb960de27526bc96e1f9af797e2c4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ssize_t guac_socket_write </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Writes the given data to the specified socket. </p>
<p>The data written is not buffered, and will be sent immediately.</p>
<p>If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object to write to. </td></tr>
<tr><td class="paramname">buf</td><td>A buffer containing the data to write. </td></tr>
<tr><td class="paramname">count</td><td>The number of bytes to write. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero on success, or non-zero if an error occurs while writing. </dd></dl>
</div>
</div>
<a class="anchor" id="ac7ec68bc42436ba316805718c292c510"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ssize_t guac_socket_write_base64 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Writes the given binary data to the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object as base64- encoded data. </p>
<p>The data written may be buffered until the buffer is flushed automatically or manually. Beware that because base64 data is buffered on top of the write buffer already used, a call to <a class="el" href="socket_8h.html#a09d5f60d75c57640a4c483d42445c1ab" title="Flushes the base64 buffer, writing padding characters as necessary.">guac_socket_flush_base64()</a> must be made before non-base64 writes (or writes of an independent block of base64 data) can be made.</p>
<p>If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object to write to. </td></tr>
<tr><td class="paramname">buf</td><td>A buffer containing the data to write. </td></tr>
<tr><td class="paramname">count</td><td>The number of bytes to write. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero on success, or non-zero if an error occurs while writing. </dd></dl>
</div>
</div>
<a class="anchor" id="a57a963e37377de2104c2d785980ff400"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ssize_t guac_socket_write_int </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int64_t&#160;</td>
<td class="paramname"><em>i</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Writes the given unsigned int to the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object. </p>
<p>The data written may be buffered until the buffer is flushed automatically or manually.</p>
<p>If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object to write to. </td></tr>
<tr><td class="paramname">i</td><td>The unsigned int to write. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero on success, or non-zero if an error occurs while writing. </dd></dl>
</div>
</div>
<a class="anchor" id="ad0cb48c7896361b522ae5a222a3b5efc"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ssize_t guac_socket_write_string </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structguac__socket.html">guac_socket</a> *&#160;</td>
<td class="paramname"><em>socket</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>str</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Writes the given string to the given <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object. </p>
<p>The data written may be buffered until the buffer is flushed automatically or manually. Note that if the string can contain characters used internally by the Guacamole protocol (commas, semicolons, or backslashes) it will need to be escaped.</p>
<p>If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">socket</td><td>The <a class="el" href="structguac__socket.html" title="The core I/O object of Guacamole.">guac_socket</a> object to write to. </td></tr>
<tr><td class="paramname">str</td><td>The string to write. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero on success, or non-zero if an error occurs while writing. </dd></dl>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2014 11:53:04 for libguac by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</small></address>
<!-- Google Analytics -->
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-75289145-1', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
</body>
</html>