<!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"/> <title>Wt: Wt::WSocketNotifier Class Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css" /> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> </head> <body> <div id="top"><!-- do not remove this div! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">Wt  <span id="projectnumber">3.2.3</span> </div> </td> </tr> </tbody> </table> </div> <!-- Generated by Doxygen 1.7.5.1 --> <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 Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> <li><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="annotated.html"><span>Class List</span></a></li> <li><a href="inherits.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="namespaceWt.html">Wt</a> </li> <li class="navelem"><a class="el" href="classWt_1_1WSocketNotifier.html">WSocketNotifier</a> </li> </ul> </div> </div> <div class="header"> <div class="summary"> <a href="#pub-types">Public Types</a> | <a href="#pub-methods">Public Member Functions</a> </div> <div class="headertitle"> <div class="title">Wt::WSocketNotifier Class Reference</div> </div> </div> <div class="contents"> <!-- doxytag: class="Wt::WSocketNotifier" --><!-- doxytag: inherits="Wt::WObject" --> <p>A utility class for asynchronous notification of socket activity. <a href="classWt_1_1WSocketNotifier.html#details">More...</a></p> <p><code>#include <Wt/WSocketNotifier></code></p> <div class="dynheader"> Inheritance diagram for Wt::WSocketNotifier:</div> <div class="dyncontent"> <div class="center"><img src="classWt_1_1WSocketNotifier__inherit__graph.png" border="0" usemap="#Wt_1_1WSocketNotifier_inherit__map" alt="Inheritance graph"/></div> <map name="Wt_1_1WSocketNotifier_inherit__map" id="Wt_1_1WSocketNotifier_inherit__map"> <area shape="rect" href="classWt_1_1WObject.html" title="A base class for objects that participate in the signal/slot system." alt="" coords="27,5,123,32"/></map> <center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div> <p><a href="classWt_1_1WSocketNotifier-members.html">List of all members.</a></p> <table class="memberdecls"> <tr><td colspan="2"><h2><a name="pub-types"></a> Public Types</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548c">Type</a> { <a class="el" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548ca057d53943ca8e7e9381526747c689d1c">Read</a>, <a class="el" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548ca85abb8bd7445d145faa84c8545b1d5f4">Write</a>, <a class="el" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548ca17c50ed02a1f9aa67ece3d5e71b66141">Exception</a> }</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Enumeration that event type. <a href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548c">More...</a><br/></td></tr> <tr><td colspan="2"><h2><a name="pub-methods"></a> Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classWt_1_1WSocketNotifier.html#ae60a2f36b909f50404bfb15864562347">WSocketNotifier</a> (int socket, <a class="el" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548c">Type</a> type, <a class="el" href="classWt_1_1WObject.html">WObject</a> *parent=0)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Creates a new socket notifier. <a href="#ae60a2f36b909f50404bfb15864562347"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aff88999b1c55254f8b129193a53ee485"></a><!-- doxytag: member="Wt::WSocketNotifier::~WSocketNotifier" ref="aff88999b1c55254f8b129193a53ee485" args="()" -->  </td><td class="memItemRight" valign="bottom"><a class="el" href="classWt_1_1WSocketNotifier.html#aff88999b1c55254f8b129193a53ee485">~WSocketNotifier</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3a1bde7ddf5a3bdde74906343027e355"></a><!-- doxytag: member="Wt::WSocketNotifier::socket" ref="a3a1bde7ddf5a3bdde74906343027e355" args="() const " --> int </td><td class="memItemRight" valign="bottom"><a class="el" href="classWt_1_1WSocketNotifier.html#a3a1bde7ddf5a3bdde74906343027e355">socket</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the socket. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42d21d0c22cdf3b3ed7ee10dbdc82aed"></a><!-- doxytag: member="Wt::WSocketNotifier::type" ref="a42d21d0c22cdf3b3ed7ee10dbdc82aed" args="() const " --> <a class="el" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548c">Type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classWt_1_1WSocketNotifier.html#a42d21d0c22cdf3b3ed7ee10dbdc82aed">type</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the event type. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classWt_1_1WSocketNotifier.html#a9cb21fa4b5827a205b21f9b656baca6d">setEnabled</a> (bool enabled)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Enables or disable the notifier. <a href="#a9cb21fa4b5827a205b21f9b656baca6d"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a893c8fcee0191bb2ae56df27697f8f7c"></a><!-- doxytag: member="Wt::WSocketNotifier::isEnabled" ref="a893c8fcee0191bb2ae56df27697f8f7c" args="() const " --> bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classWt_1_1WSocketNotifier.html#a893c8fcee0191bb2ae56df27697f8f7c">isEnabled</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Returns if the notifier is enabled. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classWt_1_1Signal.html">Signal</a>< int > & </td><td class="memItemRight" valign="bottom"><a class="el" href="classWt_1_1WSocketNotifier.html#acf78fc846ca6f915111533575dcc9401">activated</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Signal indicating an event. <a href="#acf78fc846ca6f915111533575dcc9401"></a><br/></td></tr> </table> <hr/><a name="details" id="details"></a><h2>Detailed Description</h2> <div class="textblock"><p>A utility class for asynchronous notification of socket activity. </p> <p>Use a aocket notifier to integrate listening for socket events into the Wt event loop. In this way, you do not need a separate thread to listen for socket activity. Socket activity is either the availability of data to be read (<a class="el" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548ca057d53943ca8e7e9381526747c689d1c">Read event</a>), possibility to write data (<a class="el" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548ca85abb8bd7445d145faa84c8545b1d5f4">Write event</a>), or an exception that occurred (<a class="el" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548ca17c50ed02a1f9aa67ece3d5e71b66141">Exception event</a>).</p> <p>When an event on a socket is available, the notifier emits the <a class="el" href="classWt_1_1WSocketNotifier.html#acf78fc846ca6f915111533575dcc9401" title="Signal indicating an event.">activated()</a> signal. As in the case of a user interface event (like for example <a class="el" href="classWt_1_1WInteractWidget.html#ae11e050cce0d4a8f742afa3ef92bfe8c" title="Event signal emitted when a mouse key was clicked on this widget.">WInteractWidget::clicked()</a>), you will typically modify the widget tree in response to the event. But, unless you use a timer (<a class="el" href="classWt_1_1WTimer.html" title="A utility class which provides timer signals and single-shot timers.">WTimer</a>) or use server-initiated updates (see WApplication::triggerUpdates()), these changes are not propagated to the user interface, until the next user interface event.</p> <p>Like other events, socket notification events are serial (not simultaneous), and there are no thread safety issues (you don't need to take the <a class="el" href="classWt_1_1WApplication_1_1UpdateLock.html" title="A RAII lock for manipulating and updating the application and its widgets outside of the event loop...">WApplication::UpdateLock</a>).</p> <div class="fragment"><pre class="fragment"> <a class="code" href="classWt_1_1WSocketNotifier.html" title="A utility class for asynchronous notification of socket activity.">Wt::WSocketNotifier</a> *notifier_; <span class="keywordtype">void</span> init() { ... <span class="keywordtype">int</span> sock = ... notifier_ = <span class="keyword">new</span> <a class="code" href="classWt_1_1WSocketNotifier.html#ae60a2f36b909f50404bfb15864562347" title="Creates a new socket notifier.">Wt::WSocketNotifier</a>(sock, <a class="code" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548ca057d53943ca8e7e9381526747c689d1c" title="Ready to read.">Wt::WSocketNotifier::Read</a>, <span class="keyword">this</span>); notifier_-><a class="code" href="classWt_1_1WSocketNotifier.html#acf78fc846ca6f915111533575dcc9401" title="Signal indicating an event.">activated</a>().connect(<span class="keyword">this</span>, &HelloApplication::readData); } <span class="keywordtype">void</span> readData() { <span class="comment">// data is available on socket, or socket was closed by peer</span> <span class="keywordtype">char</span> buf[100]; <span class="keywordtype">int</span> s = read(notifier_-><a class="code" href="classWt_1_1WSocketNotifier.html#a3a1bde7ddf5a3bdde74906343027e355" title="Returns the socket.">socket</a>(), buf, 99); <span class="keywordflow">if</span> (s > 0) { ... } <span class="keywordflow">else</span> { <span class="comment">// closed by peer</span> notifier_-><a class="code" href="classWt_1_1WSocketNotifier.html#a9cb21fa4b5827a205b21f9b656baca6d" title="Enables or disable the notifier.">setEnabled</a>(<span class="keyword">false</span>); close(notifier_-><a class="code" href="classWt_1_1WSocketNotifier.html#a3a1bde7ddf5a3bdde74906343027e355" title="Returns the socket.">socket</a>()); } } </pre></div><p><em>Note: At present, <a class="el" href="classWt_1_1WSocketNotifier.html" title="A utility class for asynchronous notification of socket activity.">WSocketNotifier</a> works only in conjunction with the wthttpd connector, and not when using the FastCGI connector.</em> </p> </div><hr/><h2>Member Enumeration Documentation</h2> <a class="anchor" id="a5be2fe0fe94d449a0d6b1ac77f7b548c"></a><!-- doxytag: member="Wt::WSocketNotifier::Type" ref="a5be2fe0fe94d449a0d6b1ac77f7b548c" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">enum <a class="el" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548c">Wt::WSocketNotifier::Type</a></td> </tr> </table> </div> <div class="memdoc"> <p>Enumeration that event type. </p> <dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"><em><a class="anchor" id="a5be2fe0fe94d449a0d6b1ac77f7b548ca057d53943ca8e7e9381526747c689d1c"></a><!-- doxytag: member="Read" ref="a5be2fe0fe94d449a0d6b1ac77f7b548ca057d53943ca8e7e9381526747c689d1c" args="" -->Read</em> </td><td> <p>Ready to read. </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="a5be2fe0fe94d449a0d6b1ac77f7b548ca85abb8bd7445d145faa84c8545b1d5f4"></a><!-- doxytag: member="Write" ref="a5be2fe0fe94d449a0d6b1ac77f7b548ca85abb8bd7445d145faa84c8545b1d5f4" args="" -->Write</em> </td><td> <p>Ready to write. </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="a5be2fe0fe94d449a0d6b1ac77f7b548ca17c50ed02a1f9aa67ece3d5e71b66141"></a><!-- doxytag: member="Exception" ref="a5be2fe0fe94d449a0d6b1ac77f7b548ca17c50ed02a1f9aa67ece3d5e71b66141" args="" -->Exception</em> </td><td> <p>Exception. </p> </td></tr> </table> </dd> </dl> </div> </div> <hr/><h2>Constructor & Destructor Documentation</h2> <a class="anchor" id="ae60a2f36b909f50404bfb15864562347"></a><!-- doxytag: member="Wt::WSocketNotifier::WSocketNotifier" ref="ae60a2f36b909f50404bfb15864562347" args="(int socket, Type type, WObject *parent=0)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">Wt::WSocketNotifier::WSocketNotifier </td> <td>(</td> <td class="paramtype">int </td> <td class="paramname"><em>socket</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classWt_1_1WSocketNotifier.html#a5be2fe0fe94d449a0d6b1ac77f7b548c">Type</a> </td> <td class="paramname"><em>type</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classWt_1_1WObject.html">WObject</a> * </td> <td class="paramname"><em>parent</em> = <code>0</code> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Creates a new socket notifier. </p> <p>Create a new socket listener to listen for events of given <code>type</code> on a socket with file descriptor <code>socket</code>. The <a class="el" href="classWt_1_1WSocketNotifier.html" title="A utility class for asynchronous notification of socket activity.">WSocketNotifier</a> is enabled after construction. </p> </div> </div> <hr/><h2>Member Function Documentation</h2> <a class="anchor" id="acf78fc846ca6f915111533575dcc9401"></a><!-- doxytag: member="Wt::WSocketNotifier::activated" ref="acf78fc846ca6f915111533575dcc9401" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="classWt_1_1Signal.html">Signal</a><int>& Wt::WSocketNotifier::activated </td> <td>(</td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Signal indicating an event. </p> <p>The signal is emitted when an event that was waited for is available. The signal argument is <a class="el" href="classWt_1_1WSocketNotifier.html#a3a1bde7ddf5a3bdde74906343027e355" title="Returns the socket.">socket()</a>. </p> </div> </div> <a class="anchor" id="a9cb21fa4b5827a205b21f9b656baca6d"></a><!-- doxytag: member="Wt::WSocketNotifier::setEnabled" ref="a9cb21fa4b5827a205b21f9b656baca6d" args="(bool enabled)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void Wt::WSocketNotifier::setEnabled </td> <td>(</td> <td class="paramtype">bool </td> <td class="paramname"><em>enabled</em></td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Enables or disable the notifier. </p> <p>By default, the socket notifier is enabled to receive events. When disabled, no events will be notified (as if the socket notifier didn't exist). </p> </div> </div> </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"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</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> <hr size="1"><address style="text-align: right; margin: 3px"><small> Generated on Thu Nov 1 2012 for <a href="http://www.webtoolkit.eu/wt">the C++ Web Toolkit (Wt)</a> by <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" border="0" style="vertical-align: middle; display: inline-block; height: 2em"></a> 1.7.5.1</small></address> </body> </html>