1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
3 <title>InspIRCd: InspSocket Class Reference</title>
4 <link href="inspircd.doxygen.css" rel="stylesheet" type="text/css">
6 <!-- Generated by Doxygen 1.4.4-20050815 -->
7 <div class="qindex"><a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div>
8 <h1>InspSocket Class Reference</h1><!-- doxytag: class="InspSocket" --><code>#include <<a class="el" href="socket_8h-source.html">socket.h</a>></code>
10 Collaboration diagram for InspSocket:<p><center><img src="classInspSocket__coll__graph.gif" border="0" usemap="#InspSocket__coll__map" alt="Collaboration graph"></center>
11 <center><font size="2">[<a target="top" href="graph_legend.html">legend</a>]</font></center><a href="classInspSocket-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
13 <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
14 <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#InspSocket_28_29">InspSocket</a> ()</td></tr>
16 <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#InspSocket_28int_20newfd_2C_20char_20_2Aip_29">InspSocket</a> (int newfd, char *ip)</td></tr>
18 <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#InspSocket_28std_3A_3Astring_20host_2C_20int_20port_2C_20bool_20listening_2C_20unsigned_20long_20maxtime_29">InspSocket</a> (<a class="el" href="namespaceirc.html#string">std::string</a> <a class="el" href="classInspSocket.html#host">host</a>, int <a class="el" href="classInspSocket.html#port">port</a>, bool listening, unsigned long maxtime)</td></tr>
20 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#OnConnected_28_29">OnConnected</a> ()</td></tr>
22 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#OnError_28InspSocketError_20e_29">OnError</a> (<a class="el" href="socket_8h.html#InspSocketError">InspSocketError</a> e)</td></tr>
24 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#OnDisconnect_28_29">OnDisconnect</a> ()</td></tr>
26 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#OnDataReady_28_29">OnDataReady</a> ()</td></tr>
28 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#OnTimeout_28_29">OnTimeout</a> ()</td></tr>
30 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#OnClose_28_29">OnClose</a> ()</td></tr>
32 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual char * </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#Read_28_29">Read</a> ()</td></tr>
34 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#GetIP_28_29">GetIP</a> ()</td></tr>
36 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#Write_28std_3A_3Astring_20data_29">Write</a> (<a class="el" href="namespaceirc.html#string">std::string</a> data)</td></tr>
38 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#OnIncomingConnection_28int_20newfd_2C_20char_20_2Aip_29">OnIncomingConnection</a> (int newfd, char *ip)</td></tr>
40 <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#SetState_28InspSocketState_20s_29">SetState</a> (<a class="el" href="socket_8h.html#InspSocketState">InspSocketState</a> s)</td></tr>
42 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="socket_8h.html#InspSocketState">InspSocketState</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#GetState_28_29">GetState</a> ()</td></tr>
44 <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#Poll_28_29">Poll</a> ()</td></tr>
46 <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#GetFd_28_29">GetFd</a> ()</td></tr>
48 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#Close_28_29">Close</a> ()</td></tr>
50 <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#_7EInspSocket_28_29">~InspSocket</a> ()</td></tr>
52 <tr><td colspan="2"><br><h2>Private Attributes</h2></td></tr>
53 <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#fd">fd</a></td></tr>
55 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#host">host</a></td></tr>
57 <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#port">port</a></td></tr>
59 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="socket_8h.html#InspSocketState">InspSocketState</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#state">state</a></td></tr>
61 <tr><td class="memItemLeft" nowrap align="right" valign="top">sockaddr_in </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#addr">addr</a></td></tr>
63 <tr><td class="memItemLeft" nowrap align="right" valign="top">in_addr </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#addy">addy</a></td></tr>
65 <tr><td class="memItemLeft" nowrap align="right" valign="top">time_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#timeout_5Fend">timeout_end</a></td></tr>
67 <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#timeout">timeout</a></td></tr>
69 <tr><td class="memItemLeft" nowrap align="right" valign="top">pollfd </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#polls">polls</a></td></tr>
71 <tr><td class="memItemLeft" nowrap align="right" valign="top">char </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>
73 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#IP">IP</a></td></tr>
75 <tr><td class="memItemLeft" nowrap align="right" valign="top">sockaddr_in </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#client">client</a></td></tr>
77 <tr><td class="memItemLeft" nowrap align="right" valign="top">sockaddr_in </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#server">server</a></td></tr>
79 <tr><td class="memItemLeft" nowrap align="right" valign="top">socklen_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#length">length</a></td></tr>
82 <hr><a name="_details"></a><h2>Detailed Description</h2>
87 Definition at line <a class="el" href="socket_8h-source.html#l00030">30</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.<hr><h2>Constructor & Destructor Documentation</h2>
88 <a class="anchor" name="InspSocket_28_29"></a><!-- doxytag: member="InspSocket::InspSocket" ref="InspSocket_28_29" args="()" --><p>
89 <table class="mdTable" cellpadding="2" cellspacing="0">
92 <table cellpadding="0" cellspacing="0" border="0">
94 <td class="md" nowrap valign="top">InspSocket::InspSocket </td>
95 <td class="md" valign="top">( </td>
96 <td class="mdname1" valign="top" nowrap> </td>
97 <td class="md" valign="top"> ) </td>
98 <td class="md" nowrap></td>
104 <table cellspacing="5" cellpadding="0" border="0">
114 Definition at line <a class="el" href="socket_8cpp-source.html#l00049">49</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
116 References <a class="el" href="socket_8h.html#InspSocketStateI_5FDISCONNECTED">I_DISCONNECTED</a>, and <a class="el" href="socket_8h-source.html#l00036">state</a>.<div class="fragment"><pre class="fragment"><a name="l00050"></a>00050 {
117 <a name="l00051"></a>00051 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FDISCONNECTED">I_DISCONNECTED</a>;
118 <a name="l00052"></a>00052 }
124 <a class="anchor" name="InspSocket_28int_20newfd_2C_20char_20_2Aip_29"></a><!-- doxytag: member="InspSocket::InspSocket" ref="InspSocket_28int_20newfd_2C_20char_20_2Aip_29" args="(int newfd, char *ip)" --><p>
125 <table class="mdTable" cellpadding="2" cellspacing="0">
128 <table cellpadding="0" cellspacing="0" border="0">
130 <td class="md" nowrap valign="top">InspSocket::InspSocket </td>
131 <td class="md" valign="top">( </td>
132 <td class="md" nowrap valign="top">int </td>
133 <td class="mdname" nowrap> <em>newfd</em>, </td>
136 <td class="md" nowrap align="right"></td>
138 <td class="md" nowrap>char * </td>
139 <td class="mdname" nowrap> <em>ip</em></td>
143 <td class="md">) </td>
144 <td class="md" colspan="2"></td>
150 <table cellspacing="5" cellpadding="0" border="0">
160 Definition at line <a class="el" href="socket_8cpp-source.html#l00054">54</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
162 References <a class="el" href="socketengine_8cpp-source.html#l00065">SocketEngine::AddFd()</a>, <a class="el" href="socket_8h-source.html#l00033">fd</a>, <a class="el" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>, <a class="el" href="socket_8h-source.html#l00043">IP</a>, <a class="el" href="socket_8h-source.html#l00036">state</a>, and <a class="el" href="socketengine_8h-source.html#l00044">X_ESTAB_MODULE</a>.<div class="fragment"><pre class="fragment"><a name="l00055"></a>00055 {
163 <a name="l00056"></a>00056 this-><a class="code" href="classInspSocket.html#fd">fd</a> = newfd;
164 <a name="l00057"></a>00057 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>;
165 <a name="l00058"></a>00058 this-><a class="code" href="classInspSocket.html#IP">IP</a> = ip;
166 <a name="l00059"></a>00059 <a class="code" href="modules_8cpp.html#SE">SE</a>-><a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this->fd,<span class="keyword">true</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
167 <a name="l00060"></a>00060 }
173 <a class="anchor" name="InspSocket_28std_3A_3Astring_20host_2C_20int_20port_2C_20bool_20listening_2C_20unsigned_20long_20maxtime_29"></a><!-- doxytag: member="InspSocket::InspSocket" ref="InspSocket_28std_3A_3Astring_20host_2C_20int_20port_2C_20bool_20listening_2C_20unsigned_20long_20maxtime_29" args="(std::string host, int port, bool listening, unsigned long maxtime)" --><p>
174 <table class="mdTable" cellpadding="2" cellspacing="0">
177 <table cellpadding="0" cellspacing="0" border="0">
179 <td class="md" nowrap valign="top">InspSocket::InspSocket </td>
180 <td class="md" valign="top">( </td>
181 <td class="md" nowrap valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> </td>
182 <td class="mdname" nowrap> <em>host</em>, </td>
185 <td class="md" nowrap align="right"></td>
187 <td class="md" nowrap>int </td>
188 <td class="mdname" nowrap> <em>port</em>, </td>
191 <td class="md" nowrap align="right"></td>
193 <td class="md" nowrap>bool </td>
194 <td class="mdname" nowrap> <em>listening</em>, </td>
197 <td class="md" nowrap align="right"></td>
199 <td class="md" nowrap>unsigned long </td>
200 <td class="mdname" nowrap> <em>maxtime</em></td>
204 <td class="md">) </td>
205 <td class="md" colspan="2"></td>
211 <table cellspacing="5" cellpadding="0" border="0">
221 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>.
223 References <a class="el" href="socketengine_8cpp-source.html#l00065">SocketEngine::AddFd()</a>, <a class="el" href="socket_8h-source.html#l00037">addr</a>, <a class="el" href="socket_8h-source.html#l00038">addy</a>, <a class="el" href="socket_8cpp-source.html#l00139">Close()</a>, <a class="el" href="modules_8h-source.html#l00023">DEBUG</a>, <a class="el" href="socket_8h-source.html#l00033">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#l00043">IP</a>, <a class="el" href="socket_8cpp-source.html#l00258">OnError()</a>, <a class="el" href="socket_8h-source.html#l00036">state</a>, <a class="el" href="socket_8h-source.html#l00040">timeout</a>, <a class="el" href="socket_8h-source.html#l00039">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 {
224 <a name="l00064"></a>00064 <span class="keywordflow">if</span> (listening) {
225 <a name="l00065"></a>00065 <span class="keywordflow">if</span> ((this->fd = OpenTCPSocket()) == ERROR)
226 <a name="l00066"></a>00066 {
227 <a name="l00067"></a>00067 this-><a class="code" href="classInspSocket.html#fd">fd</a> = -1;
228 <a name="l00068"></a>00068 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
229 <a name="l00069"></a>00069 this-><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>);
230 <a name="l00070"></a>00070 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"OpenTCPSocket() error"</span>);
231 <a name="l00071"></a>00071 <span class="keywordflow">return</span>;
232 <a name="l00072"></a>00072 }
233 <a name="l00073"></a>00073 <span class="keywordflow">else</span>
234 <a name="l00074"></a>00074 {
235 <a name="l00075"></a>00075 <span class="keywordflow">if</span> (BindSocket(this->fd,this->client,this->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()) == ERROR)
236 <a name="l00076"></a>00076 {
237 <a name="l00077"></a>00077 this-><a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
238 <a name="l00078"></a>00078 this-><a class="code" href="classInspSocket.html#fd">fd</a> = -1;
239 <a name="l00079"></a>00079 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
240 <a name="l00080"></a>00080 this-><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>);
241 <a name="l00081"></a>00081 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"BindSocket() error %s"</span>,strerror(errno));
242 <a name="l00082"></a>00082 <span class="keywordflow">return</span>;
243 <a name="l00083"></a>00083 }
244 <a name="l00084"></a>00084 <span class="keywordflow">else</span>
245 <a name="l00085"></a>00085 {
246 <a name="l00086"></a>00086 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>;
247 <a name="l00087"></a>00087 <a class="code" href="modules_8cpp.html#SE">SE</a>-><a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this->fd,<span class="keyword">true</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
248 <a name="l00088"></a>00088 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"New socket now in I_LISTENING state"</span>);
249 <a name="l00089"></a>00089 <span class="keywordflow">return</span>;
250 <a name="l00090"></a>00090 }
251 <a name="l00091"></a>00091 }
252 <a name="l00092"></a>00092 } <span class="keywordflow">else</span> {
253 <a name="l00093"></a>00093 <span class="keywordtype">char</span>* ip;
254 <a name="l00094"></a>00094 this-><a class="code" href="classInspSocket.html#host">host</a> = <a class="code" href="classInspSocket.html#host">host</a>;
255 <a name="l00095"></a>00095 hostent* hoste = gethostbyname(<a class="code" href="classInspSocket.html#host">host</a>.c_str());
256 <a name="l00096"></a>00096 <span class="keywordflow">if</span> (!hoste) {
257 <a name="l00097"></a>00097 ip = (<span class="keywordtype">char</span>*)<a class="code" href="classInspSocket.html#host">host</a>.c_str();
258 <a name="l00098"></a>00098 } <span class="keywordflow">else</span> {
259 <a name="l00099"></a>00099 <span class="keyword">struct </span>in_addr* ia = (in_addr*)hoste->h_addr;
260 <a name="l00100"></a>00100 ip = inet_ntoa(*ia);
261 <a name="l00101"></a>00101 }
262 <a name="l00102"></a>00102
263 <a name="l00103"></a>00103 this-><a class="code" href="classInspSocket.html#IP">IP</a> = ip;
264 <a name="l00104"></a>00104
265 <a name="l00105"></a>00105 <a class="code" href="classInspSocket.html#timeout_5Fend">timeout_end</a> = time(NULL)+maxtime;
266 <a name="l00106"></a>00106 <a class="code" href="classInspSocket.html#timeout">timeout</a> = <span class="keyword">false</span>;
267 <a name="l00107"></a>00107 <span class="keywordflow">if</span> ((this->fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
268 <a name="l00108"></a>00108 {
269 <a name="l00109"></a>00109 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
270 <a name="l00110"></a>00110 this-><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>);
271 <a name="l00111"></a>00111 <span class="keywordflow">return</span>;
272 <a name="l00112"></a>00112 }
273 <a name="l00113"></a>00113 this-><a class="code" href="classInspSocket.html#port">port</a> = <a class="code" href="classInspSocket.html#port">port</a>;
274 <a name="l00114"></a>00114 inet_aton(ip,&<a class="code" href="classInspSocket.html#addy">addy</a>);
275 <a name="l00115"></a>00115 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_family = AF_INET;
276 <a name="l00116"></a>00116 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_addr = <a class="code" href="classInspSocket.html#addy">addy</a>;
277 <a name="l00117"></a>00117 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_port = htons(this->port);
278 <a name="l00118"></a>00118
279 <a name="l00119"></a>00119 <span class="keywordtype">int</span> flags;
280 <a name="l00120"></a>00120 flags = fcntl(this->fd, F_GETFL, 0);
281 <a name="l00121"></a>00121 fcntl(this->fd, F_SETFL, flags | O_NONBLOCK);
282 <a name="l00122"></a>00122
283 <a name="l00123"></a>00123 <span class="keywordflow">if</span>(connect(this->fd, (sockaddr*)&this->addr,<span class="keyword">sizeof</span>(this->addr)) == -1)
284 <a name="l00124"></a>00124 {
285 <a name="l00125"></a>00125 <span class="keywordflow">if</span> (errno != EINPROGRESS)
286 <a name="l00126"></a>00126 {
287 <a name="l00127"></a>00127 this-><a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
288 <a name="l00128"></a>00128 this-><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>);
289 <a name="l00129"></a>00129 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
290 <a name="l00130"></a>00130 <span class="keywordflow">return</span>;
291 <a name="l00131"></a>00131 }
292 <a name="l00132"></a>00132 }
293 <a name="l00133"></a>00133 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>;
294 <a name="l00134"></a>00134 <a class="code" href="modules_8cpp.html#SE">SE</a>-><a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this->fd,<span class="keyword">false</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
295 <a name="l00135"></a>00135 <span class="keywordflow">return</span>;
296 <a name="l00136"></a>00136 }
297 <a name="l00137"></a>00137 }
303 <a class="anchor" name="_7EInspSocket_28_29"></a><!-- doxytag: member="InspSocket::~InspSocket" ref="_7EInspSocket_28_29" args="()" --><p>
304 <table class="mdTable" cellpadding="2" cellspacing="0">
307 <table cellpadding="0" cellspacing="0" border="0">
309 <td class="md" nowrap valign="top">InspSocket::~InspSocket </td>
310 <td class="md" valign="top">( </td>
311 <td class="mdname1" valign="top" nowrap> </td>
312 <td class="md" valign="top"> ) </td>
313 <td class="md" nowrap><code> [virtual]</code></td>
319 <table cellspacing="5" cellpadding="0" border="0">
329 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>.
331 References <a class="el" href="socket_8cpp-source.html#l00139">Close()</a>.<div class="fragment"><pre class="fragment"><a name="l00266"></a>00266 {
332 <a name="l00267"></a>00267 this-><a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
333 <a name="l00268"></a>00268 }
339 <hr><h2>Member Function Documentation</h2>
340 <a class="anchor" name="Close_28_29"></a><!-- doxytag: member="InspSocket::Close" ref="Close_28_29" args="()" --><p>
341 <table class="mdTable" cellpadding="2" cellspacing="0">
344 <table cellpadding="0" cellspacing="0" border="0">
346 <td class="md" nowrap valign="top">void InspSocket::Close </td>
347 <td class="md" valign="top">( </td>
348 <td class="mdname1" valign="top" nowrap> </td>
349 <td class="md" valign="top"> ) </td>
350 <td class="md" nowrap><code> [virtual]</code></td>
356 <table cellspacing="5" cellpadding="0" border="0">
366 Definition at line <a class="el" href="socket_8cpp-source.html#l00139">139</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
368 References <a class="el" href="socket_8h-source.html#l00033">fd</a>, and <a class="el" href="socket_8cpp-source.html#l00263">OnClose()</a>.
370 Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00265">~InspSocket()</a>.<div class="fragment"><pre class="fragment"><a name="l00140"></a>00140 {
371 <a name="l00141"></a>00141 <span class="keywordflow">if</span> (this->fd != -1)
372 <a name="l00142"></a>00142 {
373 <a name="l00143"></a>00143 this-><a class="code" href="classInspSocket.html#OnClose_28_29">OnClose</a>();
374 <a name="l00144"></a>00144 shutdown(this->fd,2);
375 <a name="l00145"></a>00145 close(this->fd);
376 <a name="l00146"></a>00146 this-><a class="code" href="classInspSocket.html#fd">fd</a> = -1;
377 <a name="l00147"></a>00147 }
378 <a name="l00148"></a>00148 }
384 <a class="anchor" name="GetFd_28_29"></a><!-- doxytag: member="InspSocket::GetFd" ref="GetFd_28_29" args="()" --><p>
385 <table class="mdTable" cellpadding="2" cellspacing="0">
388 <table cellpadding="0" cellspacing="0" border="0">
390 <td class="md" nowrap valign="top">int InspSocket::GetFd </td>
391 <td class="md" valign="top">( </td>
392 <td class="mdname1" valign="top" nowrap> </td>
393 <td class="md" valign="top"> ) </td>
394 <td class="md" nowrap></td>
400 <table cellspacing="5" cellpadding="0" border="0">
410 Definition at line <a class="el" href="socket_8cpp-source.html#l00252">252</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
412 References <a class="el" href="socket_8h-source.html#l00033">fd</a>.<div class="fragment"><pre class="fragment"><a name="l00253"></a>00253 {
413 <a name="l00254"></a>00254 <span class="keywordflow">return</span> this-><a class="code" href="classInspSocket.html#fd">fd</a>;
414 <a name="l00255"></a>00255 }
420 <a class="anchor" name="GetIP_28_29"></a><!-- doxytag: member="InspSocket::GetIP" ref="GetIP_28_29" args="()" --><p>
421 <table class="mdTable" cellpadding="2" cellspacing="0">
424 <table cellpadding="0" cellspacing="0" border="0">
426 <td class="md" nowrap valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> InspSocket::GetIP </td>
427 <td class="md" valign="top">( </td>
428 <td class="mdname1" valign="top" nowrap> </td>
429 <td class="md" valign="top"> ) </td>
430 <td class="md" nowrap></td>
436 <table cellspacing="5" cellpadding="0" border="0">
446 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>.
448 References <a class="el" href="socket_8h-source.html#l00043">IP</a>.<div class="fragment"><pre class="fragment"><a name="l00151"></a>00151 {
449 <a name="l00152"></a>00152 <span class="keywordflow">return</span> this-><a class="code" href="classInspSocket.html#IP">IP</a>;
450 <a name="l00153"></a>00153 }
456 <a class="anchor" name="GetState_28_29"></a><!-- doxytag: member="InspSocket::GetState" ref="GetState_28_29" args="()" --><p>
457 <table class="mdTable" cellpadding="2" cellspacing="0">
460 <table cellpadding="0" cellspacing="0" border="0">
462 <td class="md" nowrap valign="top"><a class="el" href="socket_8h.html#InspSocketState">InspSocketState</a> InspSocket::GetState </td>
463 <td class="md" valign="top">( </td>
464 <td class="mdname1" valign="top" nowrap> </td>
465 <td class="md" valign="top"> ) </td>
466 <td class="md" nowrap></td>
472 <table cellspacing="5" cellpadding="0" border="0">
482 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>.
484 References <a class="el" href="socket_8h-source.html#l00036">state</a>.<div class="fragment"><pre class="fragment"><a name="l00248"></a>00248 {
485 <a name="l00249"></a>00249 <span class="keywordflow">return</span> this-><a class="code" href="classInspSocket.html#state">state</a>;
486 <a name="l00250"></a>00250 }
492 <a class="anchor" name="OnClose_28_29"></a><!-- doxytag: member="InspSocket::OnClose" ref="OnClose_28_29" args="()" --><p>
493 <table class="mdTable" cellpadding="2" cellspacing="0">
496 <table cellpadding="0" cellspacing="0" border="0">
498 <td class="md" nowrap valign="top">void InspSocket::OnClose </td>
499 <td class="md" valign="top">( </td>
500 <td class="mdname1" valign="top" nowrap> </td>
501 <td class="md" valign="top"> ) </td>
502 <td class="md" nowrap><code> [virtual]</code></td>
508 <table cellspacing="5" cellpadding="0" border="0">
518 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>.
520 Referenced by <a class="el" href="socket_8cpp-source.html#l00139">Close()</a>.<div class="fragment"><pre class="fragment"><a name="l00263"></a>00263 { <span class="keywordflow">return</span>; }
526 <a class="anchor" name="OnConnected_28_29"></a><!-- doxytag: member="InspSocket::OnConnected" ref="OnConnected_28_29" args="()" --><p>
527 <table class="mdTable" cellpadding="2" cellspacing="0">
530 <table cellpadding="0" cellspacing="0" border="0">
532 <td class="md" nowrap valign="top">bool InspSocket::OnConnected </td>
533 <td class="md" valign="top">( </td>
534 <td class="mdname1" valign="top" nowrap> </td>
535 <td class="md" valign="top"> ) </td>
536 <td class="md" nowrap><code> [virtual]</code></td>
542 <table cellspacing="5" cellpadding="0" border="0">
552 Definition at line <a class="el" href="socket_8cpp-source.html#l00257">257</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
554 Referenced by <a class="el" href="socket_8cpp-source.html#l00197">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00257"></a>00257 { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
560 <a class="anchor" name="OnDataReady_28_29"></a><!-- doxytag: member="InspSocket::OnDataReady" ref="OnDataReady_28_29" args="()" --><p>
561 <table class="mdTable" cellpadding="2" cellspacing="0">
564 <table cellpadding="0" cellspacing="0" border="0">
566 <td class="md" nowrap valign="top">bool InspSocket::OnDataReady </td>
567 <td class="md" valign="top">( </td>
568 <td class="mdname1" valign="top" nowrap> </td>
569 <td class="md" valign="top"> ) </td>
570 <td class="md" nowrap><code> [virtual]</code></td>
576 <table cellspacing="5" cellpadding="0" border="0">
586 Definition at line <a class="el" href="socket_8cpp-source.html#l00261">261</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
588 Referenced by <a class="el" href="socket_8cpp-source.html#l00197">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00261"></a>00261 { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
594 <a class="anchor" name="OnDisconnect_28_29"></a><!-- doxytag: member="InspSocket::OnDisconnect" ref="OnDisconnect_28_29" args="()" --><p>
595 <table class="mdTable" cellpadding="2" cellspacing="0">
598 <table cellpadding="0" cellspacing="0" border="0">
600 <td class="md" nowrap valign="top">int InspSocket::OnDisconnect </td>
601 <td class="md" valign="top">( </td>
602 <td class="mdname1" valign="top" nowrap> </td>
603 <td class="md" valign="top"> ) </td>
604 <td class="md" nowrap><code> [virtual]</code></td>
610 <table cellspacing="5" cellpadding="0" border="0">
620 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>.<div class="fragment"><pre class="fragment"><a name="l00259"></a>00259 { <span class="keywordflow">return</span> 0; }
626 <a class="anchor" name="OnError_28InspSocketError_20e_29"></a><!-- doxytag: member="InspSocket::OnError" ref="OnError_28InspSocketError_20e_29" args="(InspSocketError e)" --><p>
627 <table class="mdTable" cellpadding="2" cellspacing="0">
630 <table cellpadding="0" cellspacing="0" border="0">
632 <td class="md" nowrap valign="top">void InspSocket::OnError </td>
633 <td class="md" valign="top">( </td>
634 <td class="md" nowrap valign="top"><a class="el" href="socket_8h.html#InspSocketError">InspSocketError</a> </td>
635 <td class="mdname1" valign="top" nowrap> <em>e</em> </td>
636 <td class="md" valign="top"> ) </td>
637 <td class="md" nowrap><code> [virtual]</code></td>
643 <table cellspacing="5" cellpadding="0" border="0">
653 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>.
655 Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00197">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00258"></a>00258 { <span class="keywordflow">return</span>; }
661 <a class="anchor" name="OnIncomingConnection_28int_20newfd_2C_20char_20_2Aip_29"></a><!-- doxytag: member="InspSocket::OnIncomingConnection" ref="OnIncomingConnection_28int_20newfd_2C_20char_20_2Aip_29" args="(int newfd, char *ip)" --><p>
662 <table class="mdTable" cellpadding="2" cellspacing="0">
665 <table cellpadding="0" cellspacing="0" border="0">
667 <td class="md" nowrap valign="top">int InspSocket::OnIncomingConnection </td>
668 <td class="md" valign="top">( </td>
669 <td class="md" nowrap valign="top">int </td>
670 <td class="mdname" nowrap> <em>newfd</em>, </td>
673 <td class="md" nowrap align="right"></td>
675 <td class="md" nowrap>char * </td>
676 <td class="mdname" nowrap> <em>ip</em></td>
680 <td class="md">) </td>
681 <td class="md" colspan="2"><code> [virtual]</code></td>
687 <table cellspacing="5" cellpadding="0" border="0">
697 Definition at line <a class="el" href="socket_8cpp-source.html#l00260">260</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
699 Referenced by <a class="el" href="socket_8cpp-source.html#l00197">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00260"></a>00260 { <span class="keywordflow">return</span> 0; }
705 <a class="anchor" name="OnTimeout_28_29"></a><!-- doxytag: member="InspSocket::OnTimeout" ref="OnTimeout_28_29" args="()" --><p>
706 <table class="mdTable" cellpadding="2" cellspacing="0">
709 <table cellpadding="0" cellspacing="0" border="0">
711 <td class="md" nowrap valign="top">void InspSocket::OnTimeout </td>
712 <td class="md" valign="top">( </td>
713 <td class="mdname1" valign="top" nowrap> </td>
714 <td class="md" valign="top"> ) </td>
715 <td class="md" nowrap><code> [virtual]</code></td>
721 <table cellspacing="5" cellpadding="0" border="0">
731 Definition at line <a class="el" href="socket_8cpp-source.html#l00262">262</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
733 Referenced by <a class="el" href="socket_8cpp-source.html#l00197">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00262"></a>00262 { <span class="keywordflow">return</span>; }
739 <a class="anchor" name="Poll_28_29"></a><!-- doxytag: member="InspSocket::Poll" ref="Poll_28_29" args="()" --><p>
740 <table class="mdTable" cellpadding="2" cellspacing="0">
743 <table cellpadding="0" cellspacing="0" border="0">
745 <td class="md" nowrap valign="top">bool InspSocket::Poll </td>
746 <td class="md" valign="top">( </td>
747 <td class="mdname1" valign="top" nowrap> </td>
748 <td class="md" valign="top"> ) </td>
749 <td class="md" nowrap></td>
755 <table cellspacing="5" cellpadding="0" border="0">
765 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>.
767 References <a class="el" href="socketengine_8cpp-source.html#l00065">SocketEngine::AddFd()</a>, <a class="el" href="socket_8h-source.html#l00044">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#InspSocketErrorI_5FERR_5FTIMEOUT">I_ERR_TIMEOUT</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#l00046">length</a>, <a class="el" href="socket_8cpp-source.html#l00257">OnConnected()</a>, <a class="el" href="socket_8cpp-source.html#l00261">OnDataReady()</a>, <a class="el" href="socket_8cpp-source.html#l00258">OnError()</a>, <a class="el" href="socket_8cpp-source.html#l00260">OnIncomingConnection()</a>, <a class="el" href="socket_8cpp-source.html#l00262">OnTimeout()</a>, <a class="el" href="socket_8cpp-source.html#l00241">SetState()</a>, <a class="el" href="socket_8h-source.html#l00036">state</a>, <a class="el" href="socket_8h-source.html#l00040">timeout</a>, <a class="el" href="socket_8h-source.html#l00039">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="l00198"></a>00198 {
768 <a name="l00199"></a>00199 <span class="keywordflow">if</span> ((time(NULL) > <a class="code" href="classInspSocket.html#timeout_5Fend">timeout_end</a>) && (this->state == <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>))
769 <a name="l00200"></a>00200 {
770 <a name="l00201"></a>00201 <span class="comment">// for non-listening sockets, the timeout can occur</span>
771 <a name="l00202"></a>00202 <span class="comment">// which causes termination of the connection after</span>
772 <a name="l00203"></a>00203 <span class="comment">// the given number of seconds without a successful</span>
773 <a name="l00204"></a>00204 <span class="comment">// connection.</span>
774 <a name="l00205"></a>00205 this-><a class="code" href="classInspSocket.html#OnTimeout_28_29">OnTimeout</a>();
775 <a name="l00206"></a>00206 this-><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>);
776 <a name="l00207"></a>00207 <a class="code" href="classInspSocket.html#timeout">timeout</a> = <span class="keyword">true</span>;
777 <a name="l00208"></a>00208 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
778 <a name="l00209"></a>00209 <span class="keywordflow">return</span> <span class="keyword">false</span>;
779 <a name="l00210"></a>00210 }
780 <a name="l00211"></a>00211
781 <a name="l00212"></a>00212 <span class="keywordtype">int</span> incoming = -1;
782 <a name="l00213"></a>00213
783 <a name="l00214"></a>00214 <span class="keywordflow">switch</span> (this->state)
784 <a name="l00215"></a>00215 {
785 <a name="l00216"></a>00216 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>:
786 <a name="l00217"></a>00217 this-><a class="code" href="classInspSocket.html#SetState_28InspSocketState_20s_29">SetState</a>(<a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>);
787 <a name="l00218"></a>00218 <span class="comment">/* Our socket was in write-state, so delete it and re-add it</span>
788 <a name="l00219"></a>00219 <span class="comment"> * in read-state.</span>
789 <a name="l00220"></a>00220 <span class="comment"> */</span>
790 <a name="l00221"></a>00221 <a class="code" href="modules_8cpp.html#SE">SE</a>-><a class="code" href="classSocketEngine.html#DelFd_28int_20fd_29">DelFd</a>(this->fd);
791 <a name="l00222"></a>00222 <a class="code" href="modules_8cpp.html#SE">SE</a>-><a class="code" href="classSocketEngine.html#AddFd_28int_20fd_2C_20bool_20readable_2C_20char_20type_29">AddFd</a>(this->fd,<span class="keyword">true</span>,<a class="code" href="socketengine_8h.html#X_5FESTAB_5FMODULE">X_ESTAB_MODULE</a>);
792 <a name="l00223"></a>00223 <span class="keywordflow">return</span> this-><a class="code" href="classInspSocket.html#OnConnected_28_29">OnConnected</a>();
793 <a name="l00224"></a>00224 <span class="keywordflow">break</span>;
794 <a name="l00225"></a>00225 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>:
795 <a name="l00226"></a>00226 <a class="code" href="classInspSocket.html#length">length</a> = <span class="keyword">sizeof</span> (<a class="code" href="classInspSocket.html#client">client</a>);
796 <a name="l00227"></a>00227 incoming = accept (this->fd, (sockaddr*)&<a class="code" href="classInspSocket.html#client">client</a>,&<a class="code" href="classInspSocket.html#length">length</a>);
797 <a name="l00228"></a>00228 this-><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));
798 <a name="l00229"></a>00229 <span class="keywordflow">return</span> <span class="keyword">true</span>;
799 <a name="l00230"></a>00230 <span class="keywordflow">break</span>;
800 <a name="l00231"></a>00231 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>:
801 <a name="l00232"></a>00232 <span class="keywordflow">return</span> this-><a class="code" href="classInspSocket.html#OnDataReady_28_29">OnDataReady</a>();
802 <a name="l00233"></a>00233 <span class="keywordflow">break</span>;
803 <a name="l00234"></a>00234 <span class="keywordflow">default</span>:
804 <a name="l00235"></a>00235 <span class="keywordflow">break</span>;
805 <a name="l00236"></a>00236 }
806 <a name="l00237"></a>00237
807 <a name="l00238"></a>00238 <span class="keywordflow">return</span> <span class="keyword">true</span>;
808 <a name="l00239"></a>00239 }
814 <a class="anchor" name="Read_28_29"></a><!-- doxytag: member="InspSocket::Read" ref="Read_28_29" args="()" --><p>
815 <table class="mdTable" cellpadding="2" cellspacing="0">
818 <table cellpadding="0" cellspacing="0" border="0">
820 <td class="md" nowrap valign="top">char * InspSocket::Read </td>
821 <td class="md" valign="top">( </td>
822 <td class="mdname1" valign="top" nowrap> </td>
823 <td class="md" valign="top"> ) </td>
824 <td class="md" nowrap><code> [virtual]</code></td>
830 <table cellspacing="5" cellpadding="0" border="0">
840 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>.
842 References <a class="el" href="modules_8h-source.html#l00023">DEBUG</a>, and <a class="el" href="socket_8h-source.html#l00042">ibuf</a>.<div class="fragment"><pre class="fragment"><a name="l00156"></a>00156 {
843 <a name="l00157"></a>00157 <span class="keywordtype">int</span> n = recv(this->fd,this->ibuf,<span class="keyword">sizeof</span>(this->ibuf),0);
844 <a name="l00158"></a>00158 <span class="keywordflow">if</span> (n > 0)
845 <a name="l00159"></a>00159 {
846 <a name="l00160"></a>00160 <a class="code" href="classInspSocket.html#ibuf_5B_31_36_33_38_34_5D">ibuf</a>[n] = 0;
847 <a name="l00161"></a>00161 <span class="keywordflow">return</span> <a class="code" href="classInspSocket.html#ibuf_5B_31_36_33_38_34_5D">ibuf</a>;
848 <a name="l00162"></a>00162 }
849 <a name="l00163"></a>00163 <span class="keywordflow">else</span>
850 <a name="l00164"></a>00164 {
851 <a name="l00165"></a>00165 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"EOF or error on socket"</span>);
852 <a name="l00166"></a>00166 <span class="keywordflow">return</span> NULL;
853 <a name="l00167"></a>00167 }
854 <a name="l00168"></a>00168 }
860 <a class="anchor" name="SetState_28InspSocketState_20s_29"></a><!-- doxytag: member="InspSocket::SetState" ref="SetState_28InspSocketState_20s_29" args="(InspSocketState s)" --><p>
861 <table class="mdTable" cellpadding="2" cellspacing="0">
864 <table cellpadding="0" cellspacing="0" border="0">
866 <td class="md" nowrap valign="top">void InspSocket::SetState </td>
867 <td class="md" valign="top">( </td>
868 <td class="md" nowrap valign="top"><a class="el" href="socket_8h.html#InspSocketState">InspSocketState</a> </td>
869 <td class="mdname1" valign="top" nowrap> <em>s</em> </td>
870 <td class="md" valign="top"> ) </td>
871 <td class="md" nowrap></td>
877 <table cellspacing="5" cellpadding="0" border="0">
887 Definition at line <a class="el" href="socket_8cpp-source.html#l00241">241</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
889 References <a class="el" href="modules_8h-source.html#l00023">DEBUG</a>, and <a class="el" href="socket_8h-source.html#l00036">state</a>.
891 Referenced by <a class="el" href="socket_8cpp-source.html#l00197">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00242"></a>00242 {
892 <a name="l00243"></a>00243 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"Socket state change"</span>);
893 <a name="l00244"></a>00244 this-><a class="code" href="classInspSocket.html#state">state</a> = s;
894 <a name="l00245"></a>00245 }
900 <a class="anchor" name="Write_28std_3A_3Astring_20data_29"></a><!-- doxytag: member="InspSocket::Write" ref="Write_28std_3A_3Astring_20data_29" args="(std::string data)" --><p>
901 <table class="mdTable" cellpadding="2" cellspacing="0">
904 <table cellpadding="0" cellspacing="0" border="0">
906 <td class="md" nowrap valign="top">int InspSocket::Write </td>
907 <td class="md" valign="top">( </td>
908 <td class="md" nowrap valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> </td>
909 <td class="mdname1" valign="top" nowrap> <em>data</em> </td>
910 <td class="md" valign="top"> ) </td>
911 <td class="md" nowrap><code> [virtual]</code></td>
917 <table cellspacing="5" cellpadding="0" border="0">
927 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>.<div class="fragment"><pre class="fragment"><a name="l00175"></a>00175 {
928 <a name="l00176"></a>00176 <span class="keywordtype">char</span>* d = (<span class="keywordtype">char</span>*)data.c_str();
929 <a name="l00177"></a>00177 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> written = 0;
930 <a name="l00178"></a>00178 <span class="keywordtype">int</span> n = 0;
931 <a name="l00179"></a>00179 <span class="keywordtype">int</span> s = data.length();
932 <a name="l00180"></a>00180 <span class="keywordflow">while</span> ((written < data.length()) && (n >= 0))
933 <a name="l00181"></a>00181 {
934 <a name="l00182"></a>00182 n = send(this->fd,d,s,0);
935 <a name="l00183"></a>00183 <span class="keywordflow">if</span> (n > 0)
936 <a name="l00184"></a>00184 {
937 <a name="l00185"></a>00185 <span class="comment">// If we didnt write everything, advance</span>
938 <a name="l00186"></a>00186 <span class="comment">// the pointers so that when we retry</span>
939 <a name="l00187"></a>00187 <span class="comment">// the next time around the loop, we try</span>
940 <a name="l00188"></a>00188 <span class="comment">// to write what we failed to write before.</span>
941 <a name="l00189"></a>00189 written += n;
942 <a name="l00190"></a>00190 s -= n;
943 <a name="l00191"></a>00191 d += n;
944 <a name="l00192"></a>00192 }
945 <a name="l00193"></a>00193 }
946 <a name="l00194"></a>00194 <span class="keywordflow">return</span> written;
947 <a name="l00195"></a>00195 }
953 <hr><h2>Member Data Documentation</h2>
954 <a class="anchor" name="addr"></a><!-- doxytag: member="InspSocket::addr" ref="addr" args="" --><p>
955 <table class="mdTable" cellpadding="2" cellspacing="0">
958 <table cellpadding="0" cellspacing="0" border="0">
960 <td class="md" nowrap valign="top">sockaddr_in <a class="el" href="classInspSocket.html#addr">InspSocket::addr</a><code> [private]</code> </td>
966 <table cellspacing="5" cellpadding="0" border="0">
976 Definition at line <a class="el" href="socket_8h-source.html#l00037">37</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
978 Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>. </td>
981 <a class="anchor" name="addy"></a><!-- doxytag: member="InspSocket::addy" ref="addy" args="" --><p>
982 <table class="mdTable" cellpadding="2" cellspacing="0">
985 <table cellpadding="0" cellspacing="0" border="0">
987 <td class="md" nowrap valign="top">in_addr <a class="el" href="classInspSocket.html#addy">InspSocket::addy</a><code> [private]</code> </td>
993 <table cellspacing="5" cellpadding="0" border="0">
1003 Definition at line <a class="el" href="socket_8h-source.html#l00038">38</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
1005 Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>. </td>
1008 <a class="anchor" name="client"></a><!-- doxytag: member="InspSocket::client" ref="client" args="" --><p>
1009 <table class="mdTable" cellpadding="2" cellspacing="0">
1012 <table cellpadding="0" cellspacing="0" border="0">
1014 <td class="md" nowrap valign="top">sockaddr_in <a class="el" href="classInspSocket.html#client">InspSocket::client</a><code> [private]</code> </td>
1020 <table cellspacing="5" cellpadding="0" border="0">
1030 Definition at line <a class="el" href="socket_8h-source.html#l00044">44</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
1032 Referenced by <a class="el" href="socket_8cpp-source.html#l00197">Poll()</a>. </td>
1035 <a class="anchor" name="fd"></a><!-- doxytag: member="InspSocket::fd" ref="fd" args="" --><p>
1036 <table class="mdTable" cellpadding="2" cellspacing="0">
1039 <table cellpadding="0" cellspacing="0" border="0">
1041 <td class="md" nowrap valign="top">int <a class="el" href="classInspSocket.html#fd">InspSocket::fd</a><code> [private]</code> </td>
1047 <table cellspacing="5" cellpadding="0" border="0">
1057 Definition at line <a class="el" href="socket_8h-source.html#l00033">33</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
1059 Referenced by <a class="el" href="socket_8cpp-source.html#l00139">Close()</a>, <a class="el" href="socket_8cpp-source.html#l00252">GetFd()</a>, and <a class="el" href="socket_8cpp-source.html#l00054">InspSocket()</a>. </td>
1062 <a class="anchor" name="host"></a><!-- doxytag: member="InspSocket::host" ref="host" args="" --><p>
1063 <table class="mdTable" cellpadding="2" cellspacing="0">
1066 <table cellpadding="0" cellspacing="0" border="0">
1068 <td class="md" nowrap valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> <a class="el" href="classInspSocket.html#host">InspSocket::host</a><code> [private]</code> </td>
1074 <table cellspacing="5" cellpadding="0" border="0">
1084 Definition at line <a class="el" href="socket_8h-source.html#l00034">34</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>. </td>
1087 <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>
1088 <table class="mdTable" cellpadding="2" cellspacing="0">
1091 <table cellpadding="0" cellspacing="0" border="0">
1093 <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>
1099 <table cellspacing="5" cellpadding="0" border="0">
1109 Definition at line <a class="el" href="socket_8h-source.html#l00042">42</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
1111 Referenced by <a class="el" href="socket_8cpp-source.html#l00155">Read()</a>. </td>
1114 <a class="anchor" name="IP"></a><!-- doxytag: member="InspSocket::IP" ref="IP" args="" --><p>
1115 <table class="mdTable" cellpadding="2" cellspacing="0">
1118 <table cellpadding="0" cellspacing="0" border="0">
1120 <td class="md" nowrap valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> <a class="el" href="classInspSocket.html#IP">InspSocket::IP</a><code> [private]</code> </td>
1126 <table cellspacing="5" cellpadding="0" border="0">
1136 Definition at line <a class="el" href="socket_8h-source.html#l00043">43</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
1138 Referenced by <a class="el" href="socket_8cpp-source.html#l00150">GetIP()</a>, and <a class="el" href="socket_8cpp-source.html#l00054">InspSocket()</a>. </td>
1141 <a class="anchor" name="length"></a><!-- doxytag: member="InspSocket::length" ref="length" args="" --><p>
1142 <table class="mdTable" cellpadding="2" cellspacing="0">
1145 <table cellpadding="0" cellspacing="0" border="0">
1147 <td class="md" nowrap valign="top">socklen_t <a class="el" href="classInspSocket.html#length">InspSocket::length</a><code> [private]</code> </td>
1153 <table cellspacing="5" cellpadding="0" border="0">
1163 Definition at line <a class="el" href="socket_8h-source.html#l00046">46</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
1165 Referenced by <a class="el" href="socket_8cpp-source.html#l00197">Poll()</a>. </td>
1168 <a class="anchor" name="polls"></a><!-- doxytag: member="InspSocket::polls" ref="polls" args="" --><p>
1169 <table class="mdTable" cellpadding="2" cellspacing="0">
1172 <table cellpadding="0" cellspacing="0" border="0">
1174 <td class="md" nowrap valign="top">pollfd <a class="el" href="classInspSocket.html#polls">InspSocket::polls</a><code> [private]</code> </td>
1180 <table cellspacing="5" cellpadding="0" border="0">
1190 Definition at line <a class="el" href="socket_8h-source.html#l00041">41</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>. </td>
1193 <a class="anchor" name="port"></a><!-- doxytag: member="InspSocket::port" ref="port" args="" --><p>
1194 <table class="mdTable" cellpadding="2" cellspacing="0">
1197 <table cellpadding="0" cellspacing="0" border="0">
1199 <td class="md" nowrap valign="top">int <a class="el" href="classInspSocket.html#port">InspSocket::port</a><code> [private]</code> </td>
1205 <table cellspacing="5" cellpadding="0" border="0">
1215 Definition at line <a class="el" href="socket_8h-source.html#l00035">35</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>. </td>
1218 <a class="anchor" name="server"></a><!-- doxytag: member="InspSocket::server" ref="server" args="" --><p>
1219 <table class="mdTable" cellpadding="2" cellspacing="0">
1222 <table cellpadding="0" cellspacing="0" border="0">
1224 <td class="md" nowrap valign="top">sockaddr_in <a class="el" href="classInspSocket.html#server">InspSocket::server</a><code> [private]</code> </td>
1230 <table cellspacing="5" cellpadding="0" border="0">
1240 Definition at line <a class="el" href="socket_8h-source.html#l00045">45</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>. </td>
1243 <a class="anchor" name="state"></a><!-- doxytag: member="InspSocket::state" ref="state" args="" --><p>
1244 <table class="mdTable" cellpadding="2" cellspacing="0">
1247 <table cellpadding="0" cellspacing="0" border="0">
1249 <td class="md" nowrap valign="top"><a class="el" href="socket_8h.html#InspSocketState">InspSocketState</a> <a class="el" href="classInspSocket.html#state">InspSocket::state</a><code> [private]</code> </td>
1255 <table cellspacing="5" cellpadding="0" border="0">
1265 Definition at line <a class="el" href="socket_8h-source.html#l00036">36</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
1267 Referenced by <a class="el" href="socket_8cpp-source.html#l00247">GetState()</a>, <a class="el" href="socket_8cpp-source.html#l00049">InspSocket()</a>, <a class="el" href="socket_8cpp-source.html#l00197">Poll()</a>, and <a class="el" href="socket_8cpp-source.html#l00241">SetState()</a>. </td>
1270 <a class="anchor" name="timeout"></a><!-- doxytag: member="InspSocket::timeout" ref="timeout" args="" --><p>
1271 <table class="mdTable" cellpadding="2" cellspacing="0">
1274 <table cellpadding="0" cellspacing="0" border="0">
1276 <td class="md" nowrap valign="top">bool <a class="el" href="classInspSocket.html#timeout">InspSocket::timeout</a><code> [private]</code> </td>
1282 <table cellspacing="5" cellpadding="0" border="0">
1292 Definition at line <a class="el" href="socket_8h-source.html#l00040">40</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
1294 Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00197">Poll()</a>. </td>
1297 <a class="anchor" name="timeout_5Fend"></a><!-- doxytag: member="InspSocket::timeout_end" ref="timeout_5Fend" args="" --><p>
1298 <table class="mdTable" cellpadding="2" cellspacing="0">
1301 <table cellpadding="0" cellspacing="0" border="0">
1303 <td class="md" nowrap valign="top">time_t <a class="el" href="classInspSocket.html#timeout_5Fend">InspSocket::timeout_end</a><code> [private]</code> </td>
1309 <table cellspacing="5" cellpadding="0" border="0">
1319 Definition at line <a class="el" href="socket_8h-source.html#l00039">39</a> of file <a class="el" href="socket_8h-source.html">socket.h</a>.
1321 Referenced by <a class="el" href="socket_8cpp-source.html#l00062">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00197">Poll()</a>. </td>
1324 <hr>The documentation for this class was generated from the following files:<ul>
1325 <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>
1326 <hr size="1"><address style="align: right;"><small>Generated on Mon Dec 12 13:31:12 2005 for InspIRCd by
1327 <a href="http://www.doxygen.org/index.html">
1328 <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4-20050815 </small></address>