]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - docs/module-doc/classInspSocket.html
Fixed binary images in this dir that cvs2svn stored as ascii
[user/henk/code/inspircd.git] / docs / module-doc / classInspSocket.html
index 17e451becb97b821bb7f6ae7c6b92cf6d1e7a90b..47533fd3a908e3fa6d1d1f3077c2d10f9437e712 100644 (file)
@@ -74,6 +74,10 @@ Collaboration diagram for InspSocket:<p><center><img src="classInspSocket__coll_
 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#_7EInspSocket_28_29">~InspSocket</a> ()</td></tr>
 
 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The destructor may implicitly call <a class="el" href="classInspSocket.html#OnClose_28_29">OnClose()</a>, and will close() and shutdown() the file descriptor used for this socket.  <a href="#_7EInspSocket_28_29"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Private Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#FlushWriteBuffer_28_29">FlushWriteBuffer</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Flushes the write buffer.  <a href="#FlushWriteBuffer_28_29"></a><br></td></tr>
 <tr><td colspan="2"><br><h2>Private Attributes</h2></td></tr>
 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#fd">fd</a></td></tr>
 
@@ -99,9 +103,12 @@ Collaboration diagram for InspSocket:<p><center><img src="classInspSocket__coll_
 <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#timeout">timeout</a></td></tr>
 
 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This value is true if the socket has timed out.  <a href="#timeout"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#ibuf_5B_31_36_33_38_34_5D">ibuf</a> [16384]</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#ibuf_5B_36_35_35_33_35_5D">ibuf</a> [65535]</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Socket input buffer, used by read().  <a href="#ibuf_5B_36_35_35_33_35_5D"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="namespaceirc.html#string">std::string</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#Buffer">Buffer</a></td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Socket input buffer, used by read().  <a href="#ibuf_5B_31_36_33_38_34_5D"></a><br></td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The output buffer for this socket.  <a href="#Buffer"></a><br></td></tr>
 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="namespaceirc.html#string">std::string</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#IP">IP</a></td></tr>
 
 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The IP address being connected to stored in string form for easy retrieval by accessors.  <a href="#IP"></a><br></td></tr>
@@ -151,11 +158,11 @@ The default constructor does nothing and should not be used.
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00048">48</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00045">45</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-References <a class="el" href="socket_8h.html#InspSocketStateI_5FDISCONNECTED">I_DISCONNECTED</a>, and <a class="el" href="socket_8h-source.html#l00072">state</a>.<div class="fragment"><pre class="fragment"><a name="l00049"></a>00049 {
-<a name="l00050"></a>00050         this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FDISCONNECTED">I_DISCONNECTED</a>;
-<a name="l00051"></a>00051 }
+References <a class="el" href="socket_8h.html#InspSocketStateI_5FDISCONNECTED">I_DISCONNECTED</a>, and <a class="el" href="socket_8h-source.html#l00072">state</a>.<div class="fragment"><pre class="fragment"><a name="l00046"></a>00046 {
+<a name="l00047"></a>00047         this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FDISCONNECTED">I_DISCONNECTED</a>;
+<a name="l00048"></a>00048 }
 </pre></div>
 <p>
     </td>
@@ -199,15 +206,15 @@ This constructor is used to associate an existing connecting with an InspSocket
 <p>
 The given file descriptor must be valid, and when initialized, the InspSocket will be set with the given IP address and placed in CONNECTED state.
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00053">53</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00050">50</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-References <a class="el" href="socketengine_8cpp-source.html#l00065">SocketEngine::AddFd()</a>, <a class="el" href="socket_8h-source.html#l00054">fd</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>, <a class="el" href="socket_8h-source.html#l00113">IP</a>, <a class="el" href="socket_8h-source.html#l00072">state</a>, and <a class="el" href="socketengine_8h-source.html#l00044">X_ESTAB_MODULE</a>.<div class="fragment"><pre class="fragment"><a name="l00054"></a>00054 {
-<a name="l00055"></a>00055         this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a> = newfd;
-<a name="l00056"></a>00056         this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>;
-<a name="l00057"></a>00057         this-&gt;<a class="code" href="classInspSocket.html#IP">IP</a> = ip;
-<a name="l00058"></a>00058         <a class="code" href="modules_8cpp.html#SE">SE</a>-&gt;<a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this-&gt;fd,<span class="keyword">true</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
-<a name="l00059"></a>00059         <a class="code" href="socket_8cpp.html#socket_5Fref_5B_36_35_35_33_35_5D">socket_ref</a>[this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a>] = <span class="keyword">this</span>;
-<a name="l00060"></a>00060 }
+References <a class="el" href="socketengine_8cpp-source.html#l00065">SocketEngine::AddFd()</a>, <a class="el" href="socket_8h-source.html#l00054">fd</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>, <a class="el" href="socket_8h-source.html#l00118">IP</a>, <a class="el" href="inspircd_8h-source.html#l00111">InspIRCd::SE</a>, <a class="el" href="socket_8h-source.html#l00072">state</a>, and <a class="el" href="socketengine_8h-source.html#l00044">X_ESTAB_MODULE</a>.<div class="fragment"><pre class="fragment"><a name="l00051"></a>00051 {
+<a name="l00052"></a>00052         this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a> = newfd;
+<a name="l00053"></a>00053         this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>;
+<a name="l00054"></a>00054         this-&gt;<a class="code" href="classInspSocket.html#IP">IP</a> = ip;
+<a name="l00055"></a>00055         <a class="code" href="modules_8cpp.html#ServerInstance">ServerInstance</a>-&gt;<a class="code" href="classInspIRCd.html#SE">SE</a>-&gt;<a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this-&gt;fd,<span class="keyword">true</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
+<a name="l00056"></a>00056         <a class="code" href="socket_8cpp.html#socket_5Fref_5B_36_35_35_33_35_5D">socket_ref</a>[this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a>] = <span class="keyword">this</span>;
+<a name="l00057"></a>00057 }
 </pre></div>
 <p>
     </td>
@@ -271,85 +278,85 @@ This constructor is used to create a new socket, either listening for connection
 </dl>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00062">62</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
-<p>
-References <a class="el" href="socketengine_8cpp-source.html#l00065">SocketEngine::AddFd()</a>, <a class="el" href="socket_8h-source.html#l00078">addr</a>, <a class="el" href="socket_8h-source.html#l00084">addy</a>, <a class="el" href="inspircd__io_8h.html#BindSocket_28int_20sockfd_2C_20struct_20sockaddr_5Fin_20client_2C_20struct_20sockaddr_5Fin_20server_2C_20int_20port_2C_20char_20_2Aaddr_29">BindSocket()</a>, <a class="el" href="socket_8cpp-source.html#l00141">Close()</a>, <a class="el" href="inspircd__io_8h-source.html#l00028">DEBUG</a>, <a class="el" href="inspircd_8h-source.html#l00049">ERROR</a>, <a class="el" href="socket_8h-source.html#l00054">fd</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>, <a class="el" href="socket_8h.html#InspSocketErrorI_5FERR_5FBIND">I_ERR_BIND</a>, <a class="el" href="socket_8h.html#InspSocketErrorI_5FERR_5FCONNECT">I_ERR_CONNECT</a>, <a class="el" href="socket_8h.html#InspSocketErrorI_5FERR_5FSOCKET">I_ERR_SOCKET</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>, <a class="el" href="socket_8h-source.html#l00113">IP</a>, <a class="el" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log()</a>, <a class="el" href="socket_8cpp-source.html#l00265">OnError()</a>, <a class="el" href="inspircd__io_8h.html#OpenTCPSocket_28void_29">OpenTCPSocket()</a>, <a class="el" href="socket_8h-source.html#l00072">state</a>, <a class="el" href="socket_8h-source.html#l00097">timeout</a>, <a class="el" href="socket_8h-source.html#l00091">timeout_end</a>, and <a class="el" href="socketengine_8h-source.html#l00044">X_ESTAB_MODULE</a>.<div class="fragment"><pre class="fragment"><a name="l00063"></a>00063 {
-<a name="l00064"></a>00064         <span class="keywordflow">if</span> (listening) {
-<a name="l00065"></a>00065                 <span class="keywordflow">if</span> ((this-&gt;fd = <a class="code" href="inspircd__io_8h.html#OpenTCPSocket_28void_29">OpenTCPSocket</a>()) == <a class="code" href="inspircd_8h.html#ERROR">ERROR</a>)
-<a name="l00066"></a>00066                 {
-<a name="l00067"></a>00067                         this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a> = -1;
-<a name="l00068"></a>00068                         this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
-<a name="l00069"></a>00069                         this-&gt;<a class="code" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError</a>(<a class="code" href="socket_8h.html#InspSocketErrorI_5FERR_5FSOCKET">I_ERR_SOCKET</a>);
-<a name="l00070"></a>00070                         <a class="code" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log</a>(<a class="code" href="inspircd__io_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"OpenTCPSocket() error"</span>);
-<a name="l00071"></a>00071                         <span class="keywordflow">return</span>;
-<a name="l00072"></a>00072                 }
-<a name="l00073"></a>00073                 <span class="keywordflow">else</span>
-<a name="l00074"></a>00074                 {
-<a name="l00075"></a>00075                         <span class="keywordflow">if</span> (<a class="code" href="inspircd__io_8h.html#BindSocket_28int_20sockfd_2C_20struct_20sockaddr_5Fin_20client_2C_20struct_20sockaddr_5Fin_20server_2C_20int_20port_2C_20char_20_2Aaddr_29">BindSocket</a>(this-&gt;fd,this-&gt;client,this-&gt;server,<a class="code" href="classInspSocket.html#port">port</a>,(<span class="keywordtype">char</span>*)<a class="code" href="classInspSocket.html#host">host</a>.c_str()) == <a class="code" href="inspircd_8h.html#ERROR">ERROR</a>)
-<a name="l00076"></a>00076                         {
-<a name="l00077"></a>00077                                 this-&gt;<a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
-<a name="l00078"></a>00078                                 this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a> = -1;
-<a name="l00079"></a>00079                                 this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
-<a name="l00080"></a>00080                                 this-&gt;<a class="code" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError</a>(<a class="code" href="socket_8h.html#InspSocketErrorI_5FERR_5FBIND">I_ERR_BIND</a>);
-<a name="l00081"></a>00081                                 <a class="code" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log</a>(<a class="code" href="inspircd__io_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"BindSocket() error %s"</span>,strerror(errno));
-<a name="l00082"></a>00082                                 <span class="keywordflow">return</span>;
-<a name="l00083"></a>00083                         }
-<a name="l00084"></a>00084                         <span class="keywordflow">else</span>
-<a name="l00085"></a>00085                         {
-<a name="l00086"></a>00086                                 this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>;
-<a name="l00087"></a>00087                                 <a class="code" href="modules_8cpp.html#SE">SE</a>-&gt;<a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this-&gt;fd,<span class="keyword">true</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
-<a name="l00088"></a>00088                                 <a class="code" href="socket_8cpp.html#socket_5Fref_5B_36_35_35_33_35_5D">socket_ref</a>[this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a>] = <span class="keyword">this</span>;
-<a name="l00089"></a>00089                                 <a class="code" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log</a>(<a class="code" href="inspircd__io_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"New socket now in I_LISTENING state"</span>);
-<a name="l00090"></a>00090                                 <span class="keywordflow">return</span>;
-<a name="l00091"></a>00091                         }
-<a name="l00092"></a>00092                 }                       
-<a name="l00093"></a>00093         } <span class="keywordflow">else</span> {
-<a name="l00094"></a>00094                 <span class="keywordtype">char</span>* ip;
-<a name="l00095"></a>00095                 this-&gt;<a class="code" href="classInspSocket.html#host">host</a> = <a class="code" href="classInspSocket.html#host">host</a>;
-<a name="l00096"></a>00096                 hostent* hoste = gethostbyname(<a class="code" href="classInspSocket.html#host">host</a>.c_str());
-<a name="l00097"></a>00097                 <span class="keywordflow">if</span> (!hoste) {
-<a name="l00098"></a>00098                         ip = (<span class="keywordtype">char</span>*)<a class="code" href="classInspSocket.html#host">host</a>.c_str();
-<a name="l00099"></a>00099                 } <span class="keywordflow">else</span> {
-<a name="l00100"></a>00100                         <span class="keyword">struct </span>in_addr* ia = (in_addr*)hoste-&gt;h_addr;
-<a name="l00101"></a>00101                         ip = inet_ntoa(*ia);
-<a name="l00102"></a>00102                 }
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104                 this-&gt;<a class="code" href="classInspSocket.html#IP">IP</a> = ip;
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106                 <a class="code" href="classInspSocket.html#timeout_5Fend">timeout_end</a> = time(NULL)+maxtime;
-<a name="l00107"></a>00107                 <a class="code" href="classInspSocket.html#timeout">timeout</a> = <span class="keyword">false</span>;
-<a name="l00108"></a>00108                 <span class="keywordflow">if</span> ((this-&gt;fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
-<a name="l00109"></a>00109                 {
-<a name="l00110"></a>00110                         this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
-<a name="l00111"></a>00111                         this-&gt;<a class="code" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError</a>(<a class="code" href="socket_8h.html#InspSocketErrorI_5FERR_5FSOCKET">I_ERR_SOCKET</a>);
-<a name="l00112"></a>00112                         <span class="keywordflow">return</span>;
-<a name="l00113"></a>00113                 }
-<a name="l00114"></a>00114                 this-&gt;<a class="code" href="classInspSocket.html#port">port</a> = <a class="code" href="classInspSocket.html#port">port</a>;
-<a name="l00115"></a>00115                 inet_aton(ip,&amp;<a class="code" href="classInspSocket.html#addy">addy</a>);
-<a name="l00116"></a>00116                 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_family = AF_INET;
-<a name="l00117"></a>00117                 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_addr = <a class="code" href="classInspSocket.html#addy">addy</a>;
-<a name="l00118"></a>00118                 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_port = htons(this-&gt;port);
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120                 <span class="keywordtype">int</span> flags;
-<a name="l00121"></a>00121                 flags = fcntl(this-&gt;fd, F_GETFL, 0);
-<a name="l00122"></a>00122                 fcntl(this-&gt;fd, F_SETFL, flags | O_NONBLOCK);
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124                 <span class="keywordflow">if</span>(connect(this-&gt;fd, (sockaddr*)&amp;this-&gt;addr,<span class="keyword">sizeof</span>(this-&gt;addr)) == -1)
-<a name="l00125"></a>00125                 {
-<a name="l00126"></a>00126                         <span class="keywordflow">if</span> (errno != EINPROGRESS)
-<a name="l00127"></a>00127                         {
-<a name="l00128"></a>00128                                 this-&gt;<a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
-<a name="l00129"></a>00129                                 this-&gt;<a class="code" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError</a>(<a class="code" href="socket_8h.html#InspSocketErrorI_5FERR_5FCONNECT">I_ERR_CONNECT</a>);
-<a name="l00130"></a>00130                                 this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
-<a name="l00131"></a>00131                                 <span class="keywordflow">return</span>;
-<a name="l00132"></a>00132                         }
-<a name="l00133"></a>00133                 }
-<a name="l00134"></a>00134                 this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>;
-<a name="l00135"></a>00135                 <a class="code" href="modules_8cpp.html#SE">SE</a>-&gt;<a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this-&gt;fd,<span class="keyword">false</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
-<a name="l00136"></a>00136                 <a class="code" href="socket_8cpp.html#socket_5Fref_5B_36_35_35_33_35_5D">socket_ref</a>[this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a>] = <span class="keyword">this</span>;
-<a name="l00137"></a>00137                 <span class="keywordflow">return</span>;
-<a name="l00138"></a>00138         }
-<a name="l00139"></a>00139 }
+Definition at line <a class="el" href="socket_8cpp-source.html#l00059">59</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+<p>
+References <a class="el" href="socketengine_8cpp-source.html#l00065">SocketEngine::AddFd()</a>, <a class="el" href="socket_8h-source.html#l00078">addr</a>, <a class="el" href="socket_8h-source.html#l00084">addy</a>, <a class="el" href="inspircd__io_8h.html#BindSocket_28int_20sockfd_2C_20struct_20sockaddr_5Fin_20client_2C_20struct_20sockaddr_5Fin_20server_2C_20int_20port_2C_20char_20_2Aaddr_29">BindSocket()</a>, <a class="el" href="socket_8cpp-source.html#l00138">Close()</a>, <a class="el" href="inspircd__io_8h-source.html#l00029">DEBUG</a>, <a class="el" href="inspircd_8h-source.html#l00051">ERROR</a>, <a class="el" href="socket_8h-source.html#l00054">fd</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>, <a class="el" href="socket_8h.html#InspSocketErrorI_5FERR_5FBIND">I_ERR_BIND</a>, <a class="el" href="socket_8h.html#InspSocketErrorI_5FERR_5FCONNECT">I_ERR_CONNECT</a>, <a class="el" href="socket_8h.html#InspSocketErrorI_5FERR_5FSOCKET">I_ERR_SOCKET</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>, <a class="el" href="socket_8h-source.html#l00118">IP</a>, <a class="el" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log()</a>, <a class="el" href="socket_8cpp-source.html#l00264">OnError()</a>, <a class="el" href="inspircd__io_8h.html#OpenTCPSocket_28void_29">OpenTCPSocket()</a>, <a class="el" href="inspircd_8h-source.html#l00111">InspIRCd::SE</a>, <a class="el" href="socket_8h-source.html#l00072">state</a>, <a class="el" href="socket_8h-source.html#l00097">timeout</a>, <a class="el" href="socket_8h-source.html#l00091">timeout_end</a>, and <a class="el" href="socketengine_8h-source.html#l00044">X_ESTAB_MODULE</a>.<div class="fragment"><pre class="fragment"><a name="l00060"></a>00060 {
+<a name="l00061"></a>00061         <span class="keywordflow">if</span> (listening) {
+<a name="l00062"></a>00062                 <span class="keywordflow">if</span> ((this-&gt;fd = <a class="code" href="inspircd__io_8h.html#OpenTCPSocket_28void_29">OpenTCPSocket</a>()) == <a class="code" href="inspircd_8h.html#ERROR">ERROR</a>)
+<a name="l00063"></a>00063                 {
+<a name="l00064"></a>00064                         this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a> = -1;
+<a name="l00065"></a>00065                         this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
+<a name="l00066"></a>00066                         this-&gt;<a class="code" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError</a>(<a class="code" href="socket_8h.html#InspSocketErrorI_5FERR_5FSOCKET">I_ERR_SOCKET</a>);
+<a name="l00067"></a>00067                         <a class="code" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log</a>(<a class="code" href="inspircd__io_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"OpenTCPSocket() error"</span>);
+<a name="l00068"></a>00068                         <span class="keywordflow">return</span>;
+<a name="l00069"></a>00069                 }
+<a name="l00070"></a>00070                 <span class="keywordflow">else</span>
+<a name="l00071"></a>00071                 {
+<a name="l00072"></a>00072                         <span class="keywordflow">if</span> (<a class="code" href="inspircd__io_8h.html#BindSocket_28int_20sockfd_2C_20struct_20sockaddr_5Fin_20client_2C_20struct_20sockaddr_5Fin_20server_2C_20int_20port_2C_20char_20_2Aaddr_29">BindSocket</a>(this-&gt;fd,this-&gt;client,this-&gt;server,<a class="code" href="classInspSocket.html#port">port</a>,(<span class="keywordtype">char</span>*)<a class="code" href="classInspSocket.html#host">host</a>.c_str()) == <a class="code" href="inspircd_8h.html#ERROR">ERROR</a>)
+<a name="l00073"></a>00073                         {
+<a name="l00074"></a>00074                                 this-&gt;<a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
+<a name="l00075"></a>00075                                 this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a> = -1;
+<a name="l00076"></a>00076                                 this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
+<a name="l00077"></a>00077                                 this-&gt;<a class="code" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError</a>(<a class="code" href="socket_8h.html#InspSocketErrorI_5FERR_5FBIND">I_ERR_BIND</a>);
+<a name="l00078"></a>00078                                 <a class="code" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log</a>(<a class="code" href="inspircd__io_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"BindSocket() error %s"</span>,strerror(errno));
+<a name="l00079"></a>00079                                 <span class="keywordflow">return</span>;
+<a name="l00080"></a>00080                         }
+<a name="l00081"></a>00081                         <span class="keywordflow">else</span>
+<a name="l00082"></a>00082                         {
+<a name="l00083"></a>00083                                 this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>;
+<a name="l00084"></a>00084                                 <a class="code" href="modules_8cpp.html#ServerInstance">ServerInstance</a>-&gt;<a class="code" href="classInspIRCd.html#SE">SE</a>-&gt;<a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this-&gt;fd,<span class="keyword">true</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
+<a name="l00085"></a>00085                                 <a class="code" href="socket_8cpp.html#socket_5Fref_5B_36_35_35_33_35_5D">socket_ref</a>[this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a>] = <span class="keyword">this</span>;
+<a name="l00086"></a>00086                                 <a class="code" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log</a>(<a class="code" href="inspircd__io_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"New socket now in I_LISTENING state"</span>);
+<a name="l00087"></a>00087                                 <span class="keywordflow">return</span>;
+<a name="l00088"></a>00088                         }
+<a name="l00089"></a>00089                 }                       
+<a name="l00090"></a>00090         } <span class="keywordflow">else</span> {
+<a name="l00091"></a>00091                 <span class="keywordtype">char</span>* ip;
+<a name="l00092"></a>00092                 this-&gt;<a class="code" href="classInspSocket.html#host">host</a> = <a class="code" href="classInspSocket.html#host">host</a>;
+<a name="l00093"></a>00093                 hostent* hoste = gethostbyname(<a class="code" href="classInspSocket.html#host">host</a>.c_str());
+<a name="l00094"></a>00094                 <span class="keywordflow">if</span> (!hoste) {
+<a name="l00095"></a>00095                         ip = (<span class="keywordtype">char</span>*)<a class="code" href="classInspSocket.html#host">host</a>.c_str();
+<a name="l00096"></a>00096                 } <span class="keywordflow">else</span> {
+<a name="l00097"></a>00097                         <span class="keyword">struct </span>in_addr* ia = (in_addr*)hoste-&gt;h_addr;
+<a name="l00098"></a>00098                         ip = inet_ntoa(*ia);
+<a name="l00099"></a>00099                 }
+<a name="l00100"></a>00100 
+<a name="l00101"></a>00101                 this-&gt;<a class="code" href="classInspSocket.html#IP">IP</a> = ip;
+<a name="l00102"></a>00102 
+<a name="l00103"></a>00103                 <a class="code" href="classInspSocket.html#timeout_5Fend">timeout_end</a> = time(NULL)+maxtime;
+<a name="l00104"></a>00104                 <a class="code" href="classInspSocket.html#timeout">timeout</a> = <span class="keyword">false</span>;
+<a name="l00105"></a>00105                 <span class="keywordflow">if</span> ((this-&gt;fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
+<a name="l00106"></a>00106                 {
+<a name="l00107"></a>00107                         this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
+<a name="l00108"></a>00108                         this-&gt;<a class="code" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError</a>(<a class="code" href="socket_8h.html#InspSocketErrorI_5FERR_5FSOCKET">I_ERR_SOCKET</a>);
+<a name="l00109"></a>00109                         <span class="keywordflow">return</span>;
+<a name="l00110"></a>00110                 }
+<a name="l00111"></a>00111                 this-&gt;<a class="code" href="classInspSocket.html#port">port</a> = <a class="code" href="classInspSocket.html#port">port</a>;
+<a name="l00112"></a>00112                 inet_aton(ip,&amp;<a class="code" href="classInspSocket.html#addy">addy</a>);
+<a name="l00113"></a>00113                 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_family = AF_INET;
+<a name="l00114"></a>00114                 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_addr = <a class="code" href="classInspSocket.html#addy">addy</a>;
+<a name="l00115"></a>00115                 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_port = htons(this-&gt;port);
+<a name="l00116"></a>00116 
+<a name="l00117"></a>00117                 <span class="keywordtype">int</span> flags;
+<a name="l00118"></a>00118                 flags = fcntl(this-&gt;fd, F_GETFL, 0);
+<a name="l00119"></a>00119                 fcntl(this-&gt;fd, F_SETFL, flags | O_NONBLOCK);
+<a name="l00120"></a>00120 
+<a name="l00121"></a>00121                 <span class="keywordflow">if</span>(connect(this-&gt;fd, (sockaddr*)&amp;this-&gt;addr,<span class="keyword">sizeof</span>(this-&gt;addr)) == -1)
+<a name="l00122"></a>00122                 {
+<a name="l00123"></a>00123                         <span class="keywordflow">if</span> (errno != EINPROGRESS)
+<a name="l00124"></a>00124                         {
+<a name="l00125"></a>00125                                 this-&gt;<a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
+<a name="l00126"></a>00126                                 this-&gt;<a class="code" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError</a>(<a class="code" href="socket_8h.html#InspSocketErrorI_5FERR_5FCONNECT">I_ERR_CONNECT</a>);
+<a name="l00127"></a>00127                                 this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
+<a name="l00128"></a>00128                                 <span class="keywordflow">return</span>;
+<a name="l00129"></a>00129                         }
+<a name="l00130"></a>00130                 }
+<a name="l00131"></a>00131                 this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>;
+<a name="l00132"></a>00132                 <a class="code" href="modules_8cpp.html#ServerInstance">ServerInstance</a>-&gt;<a class="code" href="classInspIRCd.html#SE">SE</a>-&gt;<a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this-&gt;fd,<span class="keyword">false</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
+<a name="l00133"></a>00133                 <a class="code" href="socket_8cpp.html#socket_5Fref_5B_36_35_35_33_35_5D">socket_ref</a>[this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a>] = <span class="keyword">this</span>;
+<a name="l00134"></a>00134                 <span class="keywordflow">return</span>;
+<a name="l00135"></a>00135         }
+<a name="l00136"></a>00136 }
 </pre></div>
 <p>
     </td>
@@ -383,11 +390,11 @@ The destructor may implicitly call <a class="el" href="classInspSocket.html#OnCl
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00272">272</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00271">271</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-References <a class="el" href="socket_8cpp-source.html#l00141">Close()</a>.<div class="fragment"><pre class="fragment"><a name="l00273"></a>00273 {
-<a name="l00274"></a>00274         this-&gt;<a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
-<a name="l00275"></a>00275 }
+References <a class="el" href="socket_8cpp-source.html#l00138">Close()</a>.<div class="fragment"><pre class="fragment"><a name="l00272"></a>00272 {
+<a name="l00273"></a>00273         this-&gt;<a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
+<a name="l00274"></a>00274 }
 </pre></div>
 <p>
     </td>
@@ -422,20 +429,71 @@ This method causes the socket to close, and may also be triggered by other metho
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00141">141</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00138">138</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+<p>
+References <a class="el" href="socket_8h-source.html#l00054">fd</a>, and <a class="el" href="socket_8cpp-source.html#l00269">OnClose()</a>.
+<p>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00059">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00271">~InspSocket()</a>.<div class="fragment"><pre class="fragment"><a name="l00139"></a>00139 {
+<a name="l00140"></a>00140         <span class="keywordflow">if</span> (this-&gt;fd != -1)
+<a name="l00141"></a>00141         {
+<a name="l00142"></a>00142                 this-&gt;<a class="code" href="classInspSocket.html#OnClose_28_29">OnClose</a>();
+<a name="l00143"></a>00143                 shutdown(this-&gt;fd,2);
+<a name="l00144"></a>00144                 close(this-&gt;fd);
+<a name="l00145"></a>00145                 <a class="code" href="socket_8cpp.html#socket_5Fref_5B_36_35_35_33_35_5D">socket_ref</a>[this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a>] = NULL;
+<a name="l00146"></a>00146                 this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a> = -1;
+<a name="l00147"></a>00147         }
+<a name="l00148"></a>00148 }
+</pre></div>
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="FlushWriteBuffer_28_29"></a><!-- doxytag: member="InspSocket::FlushWriteBuffer" ref="FlushWriteBuffer_28_29" args="()" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void InspSocket::FlushWriteBuffer           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [private]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Flushes the write buffer. 
+<p>
+
+<p>
+Definition at line <a class="el" href="socket_8cpp-source.html#l00181">181</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-References <a class="el" href="socket_8h-source.html#l00054">fd</a>, and <a class="el" href="socket_8cpp-source.html#l00270">OnClose()</a>.
+References <a class="el" href="socket_8h-source.html#l00111">Buffer</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00272">~InspSocket()</a>.<div class="fragment"><pre class="fragment"><a name="l00142"></a>00142 {
-<a name="l00143"></a>00143         <span class="keywordflow">if</span> (this-&gt;fd != -1)
-<a name="l00144"></a>00144         {
-<a name="l00145"></a>00145                 this-&gt;<a class="code" href="classInspSocket.html#OnClose_28_29">OnClose</a>();
-<a name="l00146"></a>00146                 shutdown(this-&gt;fd,2);
-<a name="l00147"></a>00147                 close(this-&gt;fd);
-<a name="l00148"></a>00148                 <a class="code" href="socket_8cpp.html#socket_5Fref_5B_36_35_35_33_35_5D">socket_ref</a>[this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a>] = NULL;
-<a name="l00149"></a>00149                 this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a> = -1;
-<a name="l00150"></a>00150         }
-<a name="l00151"></a>00151 }
+Referenced by <a class="el" href="socket_8cpp-source.html#l00197">Timeout()</a>, and <a class="el" href="socket_8cpp-source.html#l00174">Write()</a>.<div class="fragment"><pre class="fragment"><a name="l00182"></a>00182 {
+<a name="l00183"></a>00183         <span class="keywordtype">int</span> result = 0;
+<a name="l00184"></a>00184         <span class="keywordflow">if</span> (this-&gt;Buffer.length())
+<a name="l00185"></a>00185         {
+<a name="l00186"></a>00186                 result = send(this-&gt;fd,this-&gt;Buffer.c_str(),this-&gt;<a class="code" href="classInspSocket.html#Buffer">Buffer</a>.length(),0);
+<a name="l00187"></a>00187                 <span class="keywordflow">if</span> (result &gt; 0)
+<a name="l00188"></a>00188                 {
+<a name="l00189"></a>00189                         <span class="comment">/* If we wrote some, advance the buffer forwards */</span>
+<a name="l00190"></a>00190                         <span class="keywordtype">char</span>* n = (<span class="keywordtype">char</span>*)this-&gt;<a class="code" href="classInspSocket.html#Buffer">Buffer</a>.c_str();
+<a name="l00191"></a>00191                         n += result;
+<a name="l00192"></a>00192                         this-&gt;<a class="code" href="classInspSocket.html#Buffer">Buffer</a> = n;
+<a name="l00193"></a>00193                 }
+<a name="l00194"></a>00194         }
+<a name="l00195"></a>00195 }
 </pre></div>
 <p>
     </td>
@@ -469,11 +527,11 @@ This method returns the socket's file descriptor as assigned by the operating sy
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00259">259</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00258">258</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-References <a class="el" href="socket_8h-source.html#l00054">fd</a>.<div class="fragment"><pre class="fragment"><a name="l00260"></a>00260 {
-<a name="l00261"></a>00261         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a>;
-<a name="l00262"></a>00262 }
+References <a class="el" href="socket_8h-source.html#l00054">fd</a>.<div class="fragment"><pre class="fragment"><a name="l00259"></a>00259 {
+<a name="l00260"></a>00260         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classInspSocket.html#fd">fd</a>;
+<a name="l00261"></a>00261 }
 </pre></div>
 <p>
     </td>
@@ -507,11 +565,11 @@ Returns the IP address associated with this connection, or an empty string if no
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00153">153</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00150">150</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-References <a class="el" href="socket_8h-source.html#l00113">IP</a>.<div class="fragment"><pre class="fragment"><a name="l00154"></a>00154 {
-<a name="l00155"></a>00155         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classInspSocket.html#IP">IP</a>;
-<a name="l00156"></a>00156 }
+References <a class="el" href="socket_8h-source.html#l00118">IP</a>.<div class="fragment"><pre class="fragment"><a name="l00151"></a>00151 {
+<a name="l00152"></a>00152         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classInspSocket.html#IP">IP</a>;
+<a name="l00153"></a>00153 }
 </pre></div>
 <p>
     </td>
@@ -545,11 +603,11 @@ Returns the current socket state.
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00254">254</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00253">253</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-References <a class="el" href="socket_8h-source.html#l00072">state</a>.<div class="fragment"><pre class="fragment"><a name="l00255"></a>00255 {
-<a name="l00256"></a>00256         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classInspSocket.html#state">state</a>;
-<a name="l00257"></a>00257 }
+References <a class="el" href="socket_8h-source.html#l00072">state</a>.<div class="fragment"><pre class="fragment"><a name="l00254"></a>00254 {
+<a name="l00255"></a>00255         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classInspSocket.html#state">state</a>;
+<a name="l00256"></a>00256 }
 </pre></div>
 <p>
     </td>
@@ -583,9 +641,9 @@ Whenever close() is called, <a class="el" href="classInspSocket.html#OnClose_28_
 <p>
 Please note that this means OnClose will be called alongside <a class="el" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError()</a>, <a class="el" href="classInspSocket.html#OnTimeout_28_29">OnTimeout()</a>, and <a class="el" href="classInspSocket.html#Close_28_29">Close()</a>, and also when cancelling a listening socket by calling the destructor indirectly.
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00270">270</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00269">269</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00141">Close()</a>.<div class="fragment"><pre class="fragment"><a name="l00270"></a>00270 { <span class="keywordflow">return</span>; }
+Referenced by <a class="el" href="socket_8cpp-source.html#l00138">Close()</a>.<div class="fragment"><pre class="fragment"><a name="l00269"></a>00269 { <span class="keywordflow">return</span>; }
 </pre></div>
 <p>
     </td>
@@ -620,9 +678,9 @@ This method is called when an outbound connection on your socket is completed.
 <dl compact><dt><b>Returns:</b></dt><dd>false to abort the connection, true to continue</dd></dl>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00264">264</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00263">263</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00217">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00264"></a>00264 { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+Referenced by <a class="el" href="socket_8cpp-source.html#l00216">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00263"></a>00263 { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
 </pre></div>
 <p>
     </td>
@@ -657,9 +715,9 @@ When there is data waiting to be read on a socket, the <a class="el" href="class
 Within this method, you *MUST* call the <a class="el" href="classInspSocket.html#Read_28_29">Read()</a> method to read any pending data. At its lowest level, this event is signalled by the core via the socket engine. If you return false from this function, the core removes your socket from its list and erases it from the socket engine, then calls <a class="el" href="classInspSocket.html#Close_28_29">InspSocket::Close()</a> and deletes it. <dl compact><dt><b>Returns:</b></dt><dd>false to close the socket</dd></dl>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00268">268</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00267">267</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00217">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00268"></a>00268 { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+Referenced by <a class="el" href="socket_8cpp-source.html#l00216">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00267"></a>00267 { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
 </pre></div>
 <p>
     </td>
@@ -693,7 +751,7 @@ When an established connection is terminated, the OnDisconnect method is trigger
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00266">266</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.<div class="fragment"><pre class="fragment"><a name="l00266"></a>00266 { <span class="keywordflow">return</span> 0; }
+Definition at line <a class="el" href="socket_8cpp-source.html#l00265">265</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.<div class="fragment"><pre class="fragment"><a name="l00265"></a>00265 { <span class="keywordflow">return</span> 0; }
 </pre></div>
 <p>
     </td>
@@ -733,9 +791,9 @@ A closed socket in itself is not an error, however errors also generate close ev
 </dl>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00265">265</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00264">264</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00200">Timeout()</a>.<div class="fragment"><pre class="fragment"><a name="l00265"></a>00265 { <span class="keywordflow">return</span>; }
+Referenced by <a class="el" href="socket_8cpp-source.html#l00059">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00197">Timeout()</a>.<div class="fragment"><pre class="fragment"><a name="l00264"></a>00264 { <span class="keywordflow">return</span>; }
 </pre></div>
 <p>
     </td>
@@ -781,9 +839,9 @@ Given the new file descriptor in the parameters, and the IP, it is recommended y
 MySocket* newsocket = new MySocket(newfd,ip);<p>
 Once you have done this, you can then associate the new socket with the core using <a class="el" href="classServer.html#AddSocket_28InspSocket_20_2Asock_29">Server::AddSocket()</a>.
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00267">267</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00266">266</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00217">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00267"></a>00267 { <span class="keywordflow">return</span> 0; }
+Referenced by <a class="el" href="socket_8cpp-source.html#l00216">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00266"></a>00266 { <span class="keywordflow">return</span> 0; }
 </pre></div>
 <p>
     </td>
@@ -817,9 +875,9 @@ When an outbound connection fails, and the attempt times out, you will receive t
 <p>
 The mthod will trigger once maxtime secons are reached (as given in the constructor) just before the socket's descriptor is closed.
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00269">269</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00268">268</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00200">Timeout()</a>.<div class="fragment"><pre class="fragment"><a name="l00269"></a>00269 { <span class="keywordflow">return</span>; }
+Referenced by <a class="el" href="socket_8cpp-source.html#l00197">Timeout()</a>.<div class="fragment"><pre class="fragment"><a name="l00268"></a>00268 { <span class="keywordflow">return</span>; }
 </pre></div>
 <p>
     </td>
@@ -853,37 +911,37 @@ Only the core should call this function.
 <p>
 When called, it is assumed the socket is ready to read data, and the method call routes the event to the various methods of InspSocket for you to handle. This can also cause the socket's state to change.
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00217">217</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
-<p>
-References <a class="el" href="socketengine_8cpp-source.html#l00065">SocketEngine::AddFd()</a>, <a class="el" href="socket_8h-source.html#l00119">client</a>, <a class="el" href="socketengine_8cpp-source.html#l00103">SocketEngine::DelFd()</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>, <a class="el" href="socket_8h-source.html#l00131">length</a>, <a class="el" href="socket_8cpp-source.html#l00264">OnConnected()</a>, <a class="el" href="socket_8cpp-source.html#l00268">OnDataReady()</a>, <a class="el" href="socket_8cpp-source.html#l00267">OnIncomingConnection()</a>, <a class="el" href="socket_8cpp-source.html#l00248">SetState()</a>, and <a class="el" href="socketengine_8h-source.html#l00044">X_ESTAB_MODULE</a>.<div class="fragment"><pre class="fragment"><a name="l00218"></a>00218 {
-<a name="l00219"></a>00219         <span class="keywordtype">int</span> incoming = -1;
-<a name="l00220"></a>00220         
-<a name="l00221"></a>00221         <span class="keywordflow">switch</span> (this-&gt;state)
-<a name="l00222"></a>00222         {
-<a name="l00223"></a>00223                 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>:
-<a name="l00224"></a>00224                         this-&gt;<a class="code" href="classInspSocket.html#SetState_28InspSocketState_20s_29">SetState</a>(<a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>);
-<a name="l00225"></a>00225                         <span class="comment">/* Our socket was in write-state, so delete it and re-add it</span>
-<a name="l00226"></a>00226 <span class="comment">                         * in read-state.</span>
-<a name="l00227"></a>00227 <span class="comment">                         */</span>
-<a name="l00228"></a>00228                         <a class="code" href="modules_8cpp.html#SE">SE</a>-&gt;<a class="code" href="classSocketEngine.html#DelFd_28int_20fd_29">DelFd</a>(this-&gt;fd);
-<a name="l00229"></a>00229                         <a class="code" href="modules_8cpp.html#SE">SE</a>-&gt;<a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this-&gt;fd,<span class="keyword">true</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
-<a name="l00230"></a>00230                         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classInspSocket.html#OnConnected_28_29">OnConnected</a>();
-<a name="l00231"></a>00231                 <span class="keywordflow">break</span>;
-<a name="l00232"></a>00232                 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>:
-<a name="l00233"></a>00233                         <a class="code" href="classInspSocket.html#length">length</a> = <span class="keyword">sizeof</span> (<a class="code" href="classInspSocket.html#client">client</a>);
-<a name="l00234"></a>00234                         incoming = accept (this-&gt;fd, (sockaddr*)&amp;<a class="code" href="classInspSocket.html#client">client</a>,&amp;<a class="code" href="classInspSocket.html#length">length</a>);
-<a name="l00235"></a>00235                         this-&gt;<a class="code" href="classInspSocket.html#OnIncomingConnection_28int_20newfd_2C_20char_20_2Aip_29">OnIncomingConnection</a>(incoming,inet_ntoa(<a class="code" href="classInspSocket.html#client">client</a>.sin_addr));
-<a name="l00236"></a>00236                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00237"></a>00237                 <span class="keywordflow">break</span>;
-<a name="l00238"></a>00238                 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>:
-<a name="l00239"></a>00239                         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classInspSocket.html#OnDataReady_28_29">OnDataReady</a>();
-<a name="l00240"></a>00240                 <span class="keywordflow">break</span>;
-<a name="l00241"></a>00241                 <span class="keywordflow">default</span>:
-<a name="l00242"></a>00242                 <span class="keywordflow">break</span>;
-<a name="l00243"></a>00243         }
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245         <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00246"></a>00246 }
+Definition at line <a class="el" href="socket_8cpp-source.html#l00216">216</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+<p>
+References <a class="el" href="socketengine_8cpp-source.html#l00065">SocketEngine::AddFd()</a>, <a class="el" href="socket_8h-source.html#l00124">client</a>, <a class="el" href="socketengine_8cpp-source.html#l00103">SocketEngine::DelFd()</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>, <a class="el" href="socket_8h-source.html#l00136">length</a>, <a class="el" href="socket_8cpp-source.html#l00263">OnConnected()</a>, <a class="el" href="socket_8cpp-source.html#l00267">OnDataReady()</a>, <a class="el" href="socket_8cpp-source.html#l00266">OnIncomingConnection()</a>, <a class="el" href="inspircd_8h-source.html#l00111">InspIRCd::SE</a>, <a class="el" href="socket_8cpp-source.html#l00247">SetState()</a>, and <a class="el" href="socketengine_8h-source.html#l00044">X_ESTAB_MODULE</a>.<div class="fragment"><pre class="fragment"><a name="l00217"></a>00217 {
+<a name="l00218"></a>00218         <span class="keywordtype">int</span> incoming = -1;
+<a name="l00219"></a>00219         
+<a name="l00220"></a>00220         <span class="keywordflow">switch</span> (this-&gt;state)
+<a name="l00221"></a>00221         {
+<a name="l00222"></a>00222                 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>:
+<a name="l00223"></a>00223                         this-&gt;<a class="code" href="classInspSocket.html#SetState_28InspSocketState_20s_29">SetState</a>(<a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>);
+<a name="l00224"></a>00224                         <span class="comment">/* Our socket was in write-state, so delete it and re-add it</span>
+<a name="l00225"></a>00225 <span class="comment">                         * in read-state.</span>
+<a name="l00226"></a>00226 <span class="comment">                         */</span>
+<a name="l00227"></a>00227                         <a class="code" href="modules_8cpp.html#ServerInstance">ServerInstance</a>-&gt;<a class="code" href="classInspIRCd.html#SE">SE</a>-&gt;<a class="code" href="classSocketEngine.html#DelFd_28int_20fd_29">DelFd</a>(this-&gt;fd);
+<a name="l00228"></a>00228                         <a class="code" href="modules_8cpp.html#ServerInstance">ServerInstance</a>-&gt;<a class="code" href="classInspIRCd.html#SE">SE</a>-&gt;<a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this-&gt;fd,<span class="keyword">true</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
+<a name="l00229"></a>00229                         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classInspSocket.html#OnConnected_28_29">OnConnected</a>();
+<a name="l00230"></a>00230                 <span class="keywordflow">break</span>;
+<a name="l00231"></a>00231                 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>:
+<a name="l00232"></a>00232                         <a class="code" href="classInspSocket.html#length">length</a> = <span class="keyword">sizeof</span> (<a class="code" href="classInspSocket.html#client">client</a>);
+<a name="l00233"></a>00233                         incoming = accept (this-&gt;fd, (sockaddr*)&amp;<a class="code" href="classInspSocket.html#client">client</a>,&amp;<a class="code" href="classInspSocket.html#length">length</a>);
+<a name="l00234"></a>00234                         this-&gt;<a class="code" href="classInspSocket.html#OnIncomingConnection_28int_20newfd_2C_20char_20_2Aip_29">OnIncomingConnection</a>(incoming,inet_ntoa(<a class="code" href="classInspSocket.html#client">client</a>.sin_addr));
+<a name="l00235"></a>00235                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00236"></a>00236                 <span class="keywordflow">break</span>;
+<a name="l00237"></a>00237                 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>:
+<a name="l00238"></a>00238                         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classInspSocket.html#OnDataReady_28_29">OnDataReady</a>();
+<a name="l00239"></a>00239                 <span class="keywordflow">break</span>;
+<a name="l00240"></a>00240                 <span class="keywordflow">default</span>:
+<a name="l00241"></a>00241                 <span class="keywordflow">break</span>;
+<a name="l00242"></a>00242         }
+<a name="l00243"></a>00243 
+<a name="l00244"></a>00244         <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00245"></a>00245 }
 </pre></div>
 <p>
     </td>
@@ -917,21 +975,21 @@ Reads all pending bytes from the socket into a char* array which can be up to 16
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00158">158</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00155">155</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-References <a class="el" href="inspircd__io_8h-source.html#l00028">DEBUG</a>, <a class="el" href="socket_8h-source.html#l00106">ibuf</a>, and <a class="el" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log()</a>.<div class="fragment"><pre class="fragment"><a name="l00159"></a>00159 {
-<a name="l00160"></a>00160         <span class="keywordtype">int</span> n = recv(this-&gt;fd,this-&gt;ibuf,<span class="keyword">sizeof</span>(this-&gt;ibuf),0);
-<a name="l00161"></a>00161         <span class="keywordflow">if</span> (n &gt; 0)
-<a name="l00162"></a>00162         {
-<a name="l00163"></a>00163                 <a class="code" href="classInspSocket.html#ibuf_5B_31_36_33_38_34_5D">ibuf</a>[n] = 0;
-<a name="l00164"></a>00164                 <span class="keywordflow">return</span> <a class="code" href="classInspSocket.html#ibuf_5B_31_36_33_38_34_5D">ibuf</a>;
-<a name="l00165"></a>00165         }
-<a name="l00166"></a>00166         <span class="keywordflow">else</span>
-<a name="l00167"></a>00167         {
-<a name="l00168"></a>00168                 <a class="code" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log</a>(<a class="code" href="inspircd__io_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"EOF or error on socket"</span>);
-<a name="l00169"></a>00169                 <span class="keywordflow">return</span> NULL;
-<a name="l00170"></a>00170         }
-<a name="l00171"></a>00171 }
+References <a class="el" href="inspircd__io_8h-source.html#l00029">DEBUG</a>, <a class="el" href="socket_8h-source.html#l00106">ibuf</a>, and <a class="el" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log()</a>.<div class="fragment"><pre class="fragment"><a name="l00156"></a>00156 {
+<a name="l00157"></a>00157         <span class="keywordtype">int</span> n = recv(this-&gt;fd,this-&gt;ibuf,<span class="keyword">sizeof</span>(this-&gt;ibuf),0);
+<a name="l00158"></a>00158         <span class="keywordflow">if</span> (n &gt; 0)
+<a name="l00159"></a>00159         {
+<a name="l00160"></a>00160                 <a class="code" href="classInspSocket.html#ibuf_5B_36_35_35_33_35_5D">ibuf</a>[n] = 0;
+<a name="l00161"></a>00161                 <span class="keywordflow">return</span> <a class="code" href="classInspSocket.html#ibuf_5B_36_35_35_33_35_5D">ibuf</a>;
+<a name="l00162"></a>00162         }
+<a name="l00163"></a>00163         <span class="keywordflow">else</span>
+<a name="l00164"></a>00164         {
+<a name="l00165"></a>00165                 <a class="code" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log</a>(<a class="code" href="inspircd__io_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"EOF or error on socket"</span>);
+<a name="l00166"></a>00166                 <span class="keywordflow">return</span> NULL;
+<a name="l00167"></a>00167         }
+<a name="l00168"></a>00168 }
 </pre></div>
 <p>
     </td>
@@ -966,14 +1024,14 @@ Changes the socket's state.
 <p>
 The core uses this to change socket states, and you should not call it directly.
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00248">248</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+Definition at line <a class="el" href="socket_8cpp-source.html#l00247">247</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
 <p>
-References <a class="el" href="inspircd__io_8h-source.html#l00028">DEBUG</a>, <a class="el" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log()</a>, and <a class="el" href="socket_8h-source.html#l00072">state</a>.
+References <a class="el" href="inspircd__io_8h-source.html#l00029">DEBUG</a>, <a class="el" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log()</a>, and <a class="el" href="socket_8h-source.html#l00072">state</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00217">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00249"></a>00249 {
-<a name="l00250"></a>00250         <a class="code" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log</a>(<a class="code" href="inspircd__io_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"Socket state change"</span>);
-<a name="l00251"></a>00251         this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = s;
-<a name="l00252"></a>00252 }
+Referenced by <a class="el" href="socket_8cpp-source.html#l00216">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00248"></a>00248 {
+<a name="l00249"></a>00249         <a class="code" href="globals_8h.html#log_28int_20level_2C_20char_20_2Atext_2C_2E_2E_2E_29">log</a>(<a class="code" href="inspircd__io_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"Socket state change"</span>);
+<a name="l00250"></a>00250         this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = s;
+<a name="l00251"></a>00251 }
 </pre></div>
 <p>
     </td>
@@ -1009,23 +1067,25 @@ This function checks if the socket has timed out yet, given the current time in
 <dl compact><dt><b>Returns:</b></dt><dd>true if timed out, false if not timed out</dd></dl>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00200">200</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
-<p>
-References <a class="el" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>, <a class="el" href="socket_8h.html#InspSocketErrorI_5FERR_5FTIMEOUT">I_ERR_TIMEOUT</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>, <a class="el" href="socket_8cpp-source.html#l00265">OnError()</a>, <a class="el" href="socket_8cpp-source.html#l00269">OnTimeout()</a>, <a class="el" href="socket_8h-source.html#l00072">state</a>, <a class="el" href="socket_8h-source.html#l00097">timeout</a>, and <a class="el" href="socket_8h-source.html#l00091">timeout_end</a>.<div class="fragment"><pre class="fragment"><a name="l00201"></a>00201 {
-<a name="l00202"></a>00202         <span class="keywordflow">if</span> ((this-&gt;state == <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>) &amp;&amp; (current &gt; <a class="code" href="classInspSocket.html#timeout_5Fend">timeout_end</a>))
-<a name="l00203"></a>00203         {
-<a name="l00204"></a>00204                 <span class="comment">// for non-listening sockets, the timeout can occur</span>
-<a name="l00205"></a>00205                 <span class="comment">// which causes termination of the connection after</span>
-<a name="l00206"></a>00206                 <span class="comment">// the given number of seconds without a successful</span>
-<a name="l00207"></a>00207                 <span class="comment">// connection.</span>
-<a name="l00208"></a>00208                 this-&gt;<a class="code" href="classInspSocket.html#OnTimeout_28_29">OnTimeout</a>();
-<a name="l00209"></a>00209                 this-&gt;<a class="code" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError</a>(<a class="code" href="socket_8h.html#InspSocketErrorI_5FERR_5FTIMEOUT">I_ERR_TIMEOUT</a>);
-<a name="l00210"></a>00210                 <a class="code" href="classInspSocket.html#timeout">timeout</a> = <span class="keyword">true</span>;
-<a name="l00211"></a>00211                 this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
-<a name="l00212"></a>00212                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00213"></a>00213         }
-<a name="l00214"></a>00214         <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00215"></a>00215 }
+Definition at line <a class="el" href="socket_8cpp-source.html#l00197">197</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+<p>
+References <a class="el" href="socket_8cpp-source.html#l00181">FlushWriteBuffer()</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>, <a class="el" href="socket_8h.html#InspSocketErrorI_5FERR_5FTIMEOUT">I_ERR_TIMEOUT</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>, <a class="el" href="socket_8cpp-source.html#l00264">OnError()</a>, <a class="el" href="socket_8cpp-source.html#l00268">OnTimeout()</a>, <a class="el" href="socket_8h-source.html#l00072">state</a>, <a class="el" href="socket_8h-source.html#l00097">timeout</a>, and <a class="el" href="socket_8h-source.html#l00091">timeout_end</a>.<div class="fragment"><pre class="fragment"><a name="l00198"></a>00198 {
+<a name="l00199"></a>00199         <span class="keywordflow">if</span> ((this-&gt;state == <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>) &amp;&amp; (current &gt; <a class="code" href="classInspSocket.html#timeout_5Fend">timeout_end</a>))
+<a name="l00200"></a>00200         {
+<a name="l00201"></a>00201                 <span class="comment">// for non-listening sockets, the timeout can occur</span>
+<a name="l00202"></a>00202                 <span class="comment">// which causes termination of the connection after</span>
+<a name="l00203"></a>00203                 <span class="comment">// the given number of seconds without a successful</span>
+<a name="l00204"></a>00204                 <span class="comment">// connection.</span>
+<a name="l00205"></a>00205                 this-&gt;<a class="code" href="classInspSocket.html#OnTimeout_28_29">OnTimeout</a>();
+<a name="l00206"></a>00206                 this-&gt;<a class="code" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError</a>(<a class="code" href="socket_8h.html#InspSocketErrorI_5FERR_5FTIMEOUT">I_ERR_TIMEOUT</a>);
+<a name="l00207"></a>00207                 <a class="code" href="classInspSocket.html#timeout">timeout</a> = <span class="keyword">true</span>;
+<a name="l00208"></a>00208                 this-&gt;<a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
+<a name="l00209"></a>00209                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00210"></a>00210         }
+<a name="l00211"></a>00211         <span class="keywordflow">if</span> (this-&gt;Buffer.length())
+<a name="l00212"></a>00212                 this-&gt;<a class="code" href="classInspSocket.html#FlushWriteBuffer_28_29">FlushWriteBuffer</a>();
+<a name="l00213"></a>00213         <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00214"></a>00214 }
 </pre></div>
 <p>
     </td>
@@ -1065,27 +1125,13 @@ No carriage returns or linefeeds are appended to the string. <dl compact><dt><b>
 </dl>
 
 <p>
-Definition at line <a class="el" href="socket_8cpp-source.html#l00177">177</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.<div class="fragment"><pre class="fragment"><a name="l00178"></a>00178 {
-<a name="l00179"></a>00179         <span class="keywordtype">char</span>* d = (<span class="keywordtype">char</span>*)data.c_str();
-<a name="l00180"></a>00180         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> written = 0;
-<a name="l00181"></a>00181         <span class="keywordtype">int</span> n = 0;
-<a name="l00182"></a>00182         <span class="keywordtype">int</span> s = data.length();
-<a name="l00183"></a>00183         <span class="keywordflow">while</span> ((written &lt; data.length()) &amp;&amp; (n &gt;= 0))
-<a name="l00184"></a>00184         {
-<a name="l00185"></a>00185                 n = send(this-&gt;fd,d,s,0);
-<a name="l00186"></a>00186                 <span class="keywordflow">if</span> (n &gt; 0)
-<a name="l00187"></a>00187                 {
-<a name="l00188"></a>00188                         <span class="comment">// If we didnt write everything, advance</span>
-<a name="l00189"></a>00189                         <span class="comment">// the pointers so that when we retry</span>
-<a name="l00190"></a>00190                         <span class="comment">// the next time around the loop, we try</span>
-<a name="l00191"></a>00191                         <span class="comment">// to write what we failed to write before.</span>
-<a name="l00192"></a>00192                         written += n;
-<a name="l00193"></a>00193                         s -= n;
-<a name="l00194"></a>00194                         d += n;
-<a name="l00195"></a>00195                 }
-<a name="l00196"></a>00196         }
-<a name="l00197"></a>00197         <span class="keywordflow">return</span> written;
-<a name="l00198"></a>00198 }
+Definition at line <a class="el" href="socket_8cpp-source.html#l00174">174</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
+<p>
+References <a class="el" href="socket_8h-source.html#l00111">Buffer</a>, and <a class="el" href="socket_8cpp-source.html#l00181">FlushWriteBuffer()</a>.<div class="fragment"><pre class="fragment"><a name="l00175"></a>00175 {
+<a name="l00176"></a>00176         this-&gt;<a class="code" href="classInspSocket.html#Buffer">Buffer</a> = this-&gt;<a class="code" href="classInspSocket.html#Buffer">Buffer</a> + data;
+<a name="l00177"></a>00177         this-&gt;<a class="code" href="classInspSocket.html#FlushWriteBuffer_28_29">FlushWriteBuffer</a>();
+<a name="l00178"></a>00178         <span class="keywordflow">return</span> data.length();
+<a name="l00179"></a>00179 }
 </pre></div>
 <p>
     </td>
@@ -1118,7 +1164,7 @@ The host being connected to, in sockaddr form.
 <p>
 Definition at line <a class="el" href="socket_8h-source.html#l00078">78</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>.    </td>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00059">InspSocket()</a>.    </td>
   </tr>
 </table>
 <a class="anchor" name="addy"></a><!-- doxytag: member="InspSocket::addy" ref="addy" args="" --><p>
@@ -1147,7 +1193,36 @@ The host being connected to, in in_addr form.
 <p>
 Definition at line <a class="el" href="socket_8h-source.html#l00084">84</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>.    </td>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00059">InspSocket()</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="Buffer"></a><!-- doxytag: member="InspSocket::Buffer" ref="Buffer" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> <a class="el" href="classInspSocket.html#Buffer">InspSocket::Buffer</a><code> [private]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The output buffer for this socket. 
+<p>
+
+<p>
+Definition at line <a class="el" href="socket_8h-source.html#l00111">111</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
+<p>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00181">FlushWriteBuffer()</a>, and <a class="el" href="socket_8cpp-source.html#l00174">Write()</a>.    </td>
   </tr>
 </table>
 <a class="anchor" name="client"></a><!-- doxytag: member="InspSocket::client" ref="client" args="" --><p>
@@ -1174,9 +1249,9 @@ Client sockaddr structure used by accept().
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8h-source.html#l00119">119</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
+Definition at line <a class="el" href="socket_8h-source.html#l00124">124</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00217">Poll()</a>.    </td>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00216">Poll()</a>.    </td>
   </tr>
 </table>
 <a class="anchor" name="fd"></a><!-- doxytag: member="InspSocket::fd" ref="fd" args="" --><p>
@@ -1205,7 +1280,7 @@ The file descriptor of this socket.
 <p>
 Definition at line <a class="el" href="socket_8h-source.html#l00054">54</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00141">Close()</a>, <a class="el" href="socket_8cpp-source.html#l00259">GetFd()</a>, and <a class="el" href="socket_8cpp-source.html#l00053">InspSocket()</a>.    </td>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00138">Close()</a>, <a class="el" href="socket_8cpp-source.html#l00258">GetFd()</a>, and <a class="el" href="socket_8cpp-source.html#l00050">InspSocket()</a>.    </td>
   </tr>
 </table>
 <a class="anchor" name="host"></a><!-- doxytag: member="InspSocket::host" ref="host" args="" --><p>
@@ -1235,13 +1310,13 @@ The hostname connected to.
 Definition at line <a class="el" href="socket_8h-source.html#l00059">59</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.    </td>
   </tr>
 </table>
-<a class="anchor" name="ibuf_5B_31_36_33_38_34_5D"></a><!-- doxytag: member="InspSocket::ibuf" ref="ibuf_5B_31_36_33_38_34_5D" args="[16384]" --><p>
+<a class="anchor" name="ibuf_5B_36_35_35_33_35_5D"></a><!-- doxytag: member="InspSocket::ibuf" ref="ibuf_5B_36_35_35_33_35_5D" args="[65535]" --><p>
 <table class="mdTable" cellpadding="2" cellspacing="0">
   <tr>
     <td class="mdRow">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top">char <a class="el" href="classInspSocket.html#ibuf_5B_31_36_33_38_34_5D">InspSocket::ibuf</a>[16384]<code> [private]</code>          </td>
+          <td class="md" nowrap valign="top">char <a class="el" href="classInspSocket.html#ibuf_5B_36_35_35_33_35_5D">InspSocket::ibuf</a>[65535]<code> [private]</code>          </td>
         </tr>
       </table>
     </td>
@@ -1257,11 +1332,11 @@ Definition at line <a class="el" href="socket_8h-source.html#l00059">59</a> of f
 <p>
 Socket input buffer, used by read(). 
 <p>
-The class which extends InspSocket is expected to implement an extendable buffer which can grow much larger than 16k, this buffer is just designed to be temporary storage. space.
+The class which extends InspSocket is expected to implement an extendable buffer which can grow much larger than 64k, this buffer is just designed to be temporary storage. space.
 <p>
 Definition at line <a class="el" href="socket_8h-source.html#l00106">106</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00158">Read()</a>.    </td>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00155">Read()</a>.    </td>
   </tr>
 </table>
 <a class="anchor" name="IP"></a><!-- doxytag: member="InspSocket::IP" ref="IP" args="" --><p>
@@ -1288,9 +1363,9 @@ The IP address being connected to stored in string form for easy retrieval by ac
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8h-source.html#l00113">113</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
+Definition at line <a class="el" href="socket_8h-source.html#l00118">118</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00153">GetIP()</a>, and <a class="el" href="socket_8cpp-source.html#l00053">InspSocket()</a>.    </td>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00150">GetIP()</a>, and <a class="el" href="socket_8cpp-source.html#l00050">InspSocket()</a>.    </td>
   </tr>
 </table>
 <a class="anchor" name="length"></a><!-- doxytag: member="InspSocket::length" ref="length" args="" --><p>
@@ -1317,9 +1392,9 @@ Used by accept() to indicate the sizes of the sockaddr_in structures.
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8h-source.html#l00131">131</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
+Definition at line <a class="el" href="socket_8h-source.html#l00136">136</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00217">Poll()</a>.    </td>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00216">Poll()</a>.    </td>
   </tr>
 </table>
 <a class="anchor" name="port"></a><!-- doxytag: member="InspSocket::port" ref="port" args="" --><p>
@@ -1373,7 +1448,7 @@ Definition at line <a class="el" href="socket_8h-source.html#l00065">65</a> of f
 <p>
 
 <p>
-Definition at line <a class="el" href="socket_8h-source.html#l00125">125</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.    </td>
+Definition at line <a class="el" href="socket_8h-source.html#l00130">130</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.    </td>
   </tr>
 </table>
 <a class="anchor" name="state"></a><!-- doxytag: member="InspSocket::state" ref="state" args="" --><p>
@@ -1402,7 +1477,7 @@ The state for this socket, either listening, connecting, connected or error.
 <p>
 Definition at line <a class="el" href="socket_8h-source.html#l00072">72</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00254">GetState()</a>, <a class="el" href="socket_8cpp-source.html#l00048">InspSocket()</a>, <a class="el" href="socket_8cpp-source.html#l00248">SetState()</a>, and <a class="el" href="socket_8cpp-source.html#l00200">Timeout()</a>.    </td>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00253">GetState()</a>, <a class="el" href="socket_8cpp-source.html#l00045">InspSocket()</a>, <a class="el" href="socket_8cpp-source.html#l00247">SetState()</a>, and <a class="el" href="socket_8cpp-source.html#l00197">Timeout()</a>.    </td>
   </tr>
 </table>
 <a class="anchor" name="timeout"></a><!-- doxytag: member="InspSocket::timeout" ref="timeout" args="" --><p>
@@ -1431,7 +1506,7 @@ This value is true if the socket has timed out.
 <p>
 Definition at line <a class="el" href="socket_8h-source.html#l00097">97</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00200">Timeout()</a>.    </td>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00059">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00197">Timeout()</a>.    </td>
   </tr>
 </table>
 <a class="anchor" name="timeout_5Fend"></a><!-- doxytag: member="InspSocket::timeout_end" ref="timeout_5Fend" args="" --><p>
@@ -1460,12 +1535,12 @@ When this time is reached, the socket times out if it is in the CONNECTING state
 <p>
 Definition at line <a class="el" href="socket_8h-source.html#l00091">91</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
 <p>
-Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00200">Timeout()</a>.    </td>
+Referenced by <a class="el" href="socket_8cpp-source.html#l00059">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00197">Timeout()</a>.    </td>
   </tr>
 </table>
 <hr>The documentation for this class was generated from the following files:<ul>
 <li><a class="el" href="socket_8h-source.html">socket.h</a><li><a class="el" href="socket_8cpp-source.html">socket.cpp</a></ul>
-<hr size="1"><address style="align: right;"><small>Generated on Wed Dec 14 19:16:26 2005 for InspIRCd by&nbsp;
+<hr size="1"><address style="align: right;"><small>Generated on Mon Dec 19 18:05:22 2005 for InspIRCd by&nbsp;
 <a href="http://www.doxygen.org/index.html">
 <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4-20050815 </small></address>
 </body>