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">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classInspSocket.html#Close_28_29">Close</a> ()</td></tr>
48 <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>
50 <tr><td colspan="2"><br><h2>Private Attributes</h2></td></tr>
51 <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>
53 <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>
55 <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>
57 <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>
59 <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>
61 <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>
63 <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>
65 <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>
67 <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>
69 <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>
71 <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>
73 <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>
75 <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>
77 <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>
80 <hr><a name="_details"></a><h2>Detailed Description</h2>
85 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>
86 <a class="anchor" name="InspSocket_28_29"></a><!-- doxytag: member="InspSocket::InspSocket" ref="InspSocket_28_29" args="()" --><p>
87 <table class="mdTable" cellpadding="2" cellspacing="0">
90 <table cellpadding="0" cellspacing="0" border="0">
92 <td class="md" nowrap valign="top">InspSocket::InspSocket </td>
93 <td class="md" valign="top">( </td>
94 <td class="mdname1" valign="top" nowrap> </td>
95 <td class="md" valign="top"> ) </td>
96 <td class="md" nowrap></td>
102 <table cellspacing="5" cellpadding="0" border="0">
112 Definition at line <a class="el" href="socket_8cpp-source.html#l00046">46</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
114 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="l00047"></a>00047 {
115 <a name="l00048"></a>00048 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FDISCONNECTED">I_DISCONNECTED</a>;
116 <a name="l00049"></a>00049 }
122 <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>
123 <table class="mdTable" cellpadding="2" cellspacing="0">
126 <table cellpadding="0" cellspacing="0" border="0">
128 <td class="md" nowrap valign="top">InspSocket::InspSocket </td>
129 <td class="md" valign="top">( </td>
130 <td class="md" nowrap valign="top">int </td>
131 <td class="mdname" nowrap> <em>newfd</em>, </td>
134 <td class="md" nowrap align="right"></td>
136 <td class="md" nowrap>char * </td>
137 <td class="mdname" nowrap> <em>ip</em></td>
141 <td class="md">) </td>
142 <td class="md" colspan="2"></td>
148 <table cellspacing="5" cellpadding="0" border="0">
158 Definition at line <a class="el" href="socket_8cpp-source.html#l00051">51</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
160 References <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>, and <a class="el" href="socket_8h-source.html#l00036">state</a>.<div class="fragment"><pre class="fragment"><a name="l00052"></a>00052 {
161 <a name="l00053"></a>00053 this-><a class="code" href="classInspSocket.html#fd">fd</a> = newfd;
162 <a name="l00054"></a>00054 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>;
163 <a name="l00055"></a>00055 this-><a class="code" href="classInspSocket.html#IP">IP</a> = ip;
164 <a name="l00056"></a>00056 }
170 <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>
171 <table class="mdTable" cellpadding="2" cellspacing="0">
174 <table cellpadding="0" cellspacing="0" border="0">
176 <td class="md" nowrap valign="top">InspSocket::InspSocket </td>
177 <td class="md" valign="top">( </td>
178 <td class="md" nowrap valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> </td>
179 <td class="mdname" nowrap> <em>host</em>, </td>
182 <td class="md" nowrap align="right"></td>
184 <td class="md" nowrap>int </td>
185 <td class="mdname" nowrap> <em>port</em>, </td>
188 <td class="md" nowrap align="right"></td>
190 <td class="md" nowrap>bool </td>
191 <td class="mdname" nowrap> <em>listening</em>, </td>
194 <td class="md" nowrap align="right"></td>
196 <td class="md" nowrap>unsigned long </td>
197 <td class="mdname" nowrap> <em>maxtime</em></td>
201 <td class="md">) </td>
202 <td class="md" colspan="2"></td>
208 <table cellspacing="5" cellpadding="0" border="0">
218 Definition at line <a class="el" href="socket_8cpp-source.html#l00058">58</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
220 References <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#l00133">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#l00247">OnError()</a>, <a class="el" href="socket_8h-source.html#l00036">state</a>, <a class="el" href="socket_8h-source.html#l00040">timeout</a>, and <a class="el" href="socket_8h-source.html#l00039">timeout_end</a>.<div class="fragment"><pre class="fragment"><a name="l00059"></a>00059 {
221 <a name="l00060"></a>00060 <span class="keywordflow">if</span> (listening) {
222 <a name="l00061"></a>00061 <span class="keywordflow">if</span> ((this->fd = OpenTCPSocket()) == ERROR)
223 <a name="l00062"></a>00062 {
224 <a name="l00063"></a>00063 this-><a class="code" href="classInspSocket.html#fd">fd</a> = -1;
225 <a name="l00064"></a>00064 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
226 <a name="l00065"></a>00065 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>);
227 <a name="l00066"></a>00066 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"OpenTCPSocket() error"</span>);
228 <a name="l00067"></a>00067 <span class="keywordflow">return</span>;
229 <a name="l00068"></a>00068 }
230 <a name="l00069"></a>00069 <span class="keywordflow">else</span>
231 <a name="l00070"></a>00070 {
232 <a name="l00071"></a>00071 <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)
233 <a name="l00072"></a>00072 {
234 <a name="l00073"></a>00073 this-><a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
235 <a name="l00074"></a>00074 this-><a class="code" href="classInspSocket.html#fd">fd</a> = -1;
236 <a name="l00075"></a>00075 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
237 <a name="l00076"></a>00076 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>);
238 <a name="l00077"></a>00077 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"BindSocket() error %s"</span>,strerror(errno));
239 <a name="l00078"></a>00078 <span class="keywordflow">return</span>;
240 <a name="l00079"></a>00079 }
241 <a name="l00080"></a>00080 <span class="keywordflow">else</span>
242 <a name="l00081"></a>00081 {
243 <a name="l00082"></a>00082 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>;
244 <a name="l00083"></a>00083 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"New socket now in I_LISTENING state"</span>);
245 <a name="l00084"></a>00084 <span class="keywordflow">return</span>;
246 <a name="l00085"></a>00085 }
247 <a name="l00086"></a>00086 }
248 <a name="l00087"></a>00087 } <span class="keywordflow">else</span> {
249 <a name="l00088"></a>00088 <span class="keywordtype">char</span>* ip;
250 <a name="l00089"></a>00089 this-><a class="code" href="classInspSocket.html#host">host</a> = <a class="code" href="classInspSocket.html#host">host</a>;
251 <a name="l00090"></a>00090 hostent* hoste = gethostbyname(<a class="code" href="classInspSocket.html#host">host</a>.c_str());
252 <a name="l00091"></a>00091 <span class="keywordflow">if</span> (!hoste) {
253 <a name="l00092"></a>00092 ip = (<span class="keywordtype">char</span>*)<a class="code" href="classInspSocket.html#host">host</a>.c_str();
254 <a name="l00093"></a>00093 } <span class="keywordflow">else</span> {
255 <a name="l00094"></a>00094 <span class="keyword">struct </span>in_addr* ia = (in_addr*)hoste->h_addr;
256 <a name="l00095"></a>00095 ip = inet_ntoa(*ia);
257 <a name="l00096"></a>00096 }
258 <a name="l00097"></a>00097
259 <a name="l00098"></a>00098 this-><a class="code" href="classInspSocket.html#IP">IP</a> = ip;
260 <a name="l00099"></a>00099
261 <a name="l00100"></a>00100 <a class="code" href="classInspSocket.html#timeout_5Fend">timeout_end</a> = time(NULL)+maxtime;
262 <a name="l00101"></a>00101 <a class="code" href="classInspSocket.html#timeout">timeout</a> = <span class="keyword">false</span>;
263 <a name="l00102"></a>00102 <span class="keywordflow">if</span> ((this->fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
264 <a name="l00103"></a>00103 {
265 <a name="l00104"></a>00104 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
266 <a name="l00105"></a>00105 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>);
267 <a name="l00106"></a>00106 <span class="keywordflow">return</span>;
268 <a name="l00107"></a>00107 }
269 <a name="l00108"></a>00108 this-><a class="code" href="classInspSocket.html#port">port</a> = <a class="code" href="classInspSocket.html#port">port</a>;
270 <a name="l00109"></a>00109 inet_aton(ip,&<a class="code" href="classInspSocket.html#addy">addy</a>);
271 <a name="l00110"></a>00110 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_family = AF_INET;
272 <a name="l00111"></a>00111 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_addr = <a class="code" href="classInspSocket.html#addy">addy</a>;
273 <a name="l00112"></a>00112 <a class="code" href="classInspSocket.html#addr">addr</a>.sin_port = htons(this->port);
274 <a name="l00113"></a>00113
275 <a name="l00114"></a>00114 <span class="keywordtype">int</span> flags;
276 <a name="l00115"></a>00115 flags = fcntl(this->fd, F_GETFL, 0);
277 <a name="l00116"></a>00116 fcntl(this->fd, F_SETFL, flags | O_NONBLOCK);
278 <a name="l00117"></a>00117
279 <a name="l00118"></a>00118 <span class="keywordflow">if</span>(connect(this->fd, (sockaddr*)&this->addr,<span class="keyword">sizeof</span>(this->addr)) == -1)
280 <a name="l00119"></a>00119 {
281 <a name="l00120"></a>00120 <span class="keywordflow">if</span> (errno != EINPROGRESS)
282 <a name="l00121"></a>00121 {
283 <a name="l00122"></a>00122 this-><a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
284 <a name="l00123"></a>00123 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>);
285 <a name="l00124"></a>00124 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
286 <a name="l00125"></a>00125 <span class="keywordflow">return</span>;
287 <a name="l00126"></a>00126 }
288 <a name="l00127"></a>00127 }
289 <a name="l00128"></a>00128 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>;
290 <a name="l00129"></a>00129 <span class="keywordflow">return</span>;
291 <a name="l00130"></a>00130 }
292 <a name="l00131"></a>00131 }
298 <a class="anchor" name="_7EInspSocket_28_29"></a><!-- doxytag: member="InspSocket::~InspSocket" ref="_7EInspSocket_28_29" args="()" --><p>
299 <table class="mdTable" cellpadding="2" cellspacing="0">
302 <table cellpadding="0" cellspacing="0" border="0">
304 <td class="md" nowrap valign="top">InspSocket::~InspSocket </td>
305 <td class="md" valign="top">( </td>
306 <td class="mdname1" valign="top" nowrap> </td>
307 <td class="md" valign="top"> ) </td>
308 <td class="md" nowrap><code> [virtual]</code></td>
314 <table cellspacing="5" cellpadding="0" border="0">
324 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>.
326 References <a class="el" href="socket_8cpp-source.html#l00133">Close()</a>.<div class="fragment"><pre class="fragment"><a name="l00255"></a>00255 {
327 <a name="l00256"></a>00256 this-><a class="code" href="classInspSocket.html#Close_28_29">Close</a>();
328 <a name="l00257"></a>00257 }
334 <hr><h2>Member Function Documentation</h2>
335 <a class="anchor" name="Close_28_29"></a><!-- doxytag: member="InspSocket::Close" ref="Close_28_29" args="()" --><p>
336 <table class="mdTable" cellpadding="2" cellspacing="0">
339 <table cellpadding="0" cellspacing="0" border="0">
341 <td class="md" nowrap valign="top">void InspSocket::Close </td>
342 <td class="md" valign="top">( </td>
343 <td class="mdname1" valign="top" nowrap> </td>
344 <td class="md" valign="top"> ) </td>
345 <td class="md" nowrap><code> [virtual]</code></td>
351 <table cellspacing="5" cellpadding="0" border="0">
361 Definition at line <a class="el" href="socket_8cpp-source.html#l00133">133</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
363 References <a class="el" href="socket_8h-source.html#l00033">fd</a>, and <a class="el" href="socket_8cpp-source.html#l00252">OnClose()</a>.
365 Referenced by <a class="el" href="socket_8cpp-source.html#l00058">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00254">~InspSocket()</a>.<div class="fragment"><pre class="fragment"><a name="l00134"></a>00134 {
366 <a name="l00135"></a>00135 <span class="keywordflow">if</span> (this->fd != -1)
367 <a name="l00136"></a>00136 {
368 <a name="l00137"></a>00137 this-><a class="code" href="classInspSocket.html#OnClose_28_29">OnClose</a>();
369 <a name="l00138"></a>00138 shutdown(this->fd,2);
370 <a name="l00139"></a>00139 close(this->fd);
371 <a name="l00140"></a>00140 this-><a class="code" href="classInspSocket.html#fd">fd</a> = -1;
372 <a name="l00141"></a>00141 }
373 <a name="l00142"></a>00142 }
379 <a class="anchor" name="GetIP_28_29"></a><!-- doxytag: member="InspSocket::GetIP" ref="GetIP_28_29" args="()" --><p>
380 <table class="mdTable" cellpadding="2" cellspacing="0">
383 <table cellpadding="0" cellspacing="0" border="0">
385 <td class="md" nowrap valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> InspSocket::GetIP </td>
386 <td class="md" valign="top">( </td>
387 <td class="mdname1" valign="top" nowrap> </td>
388 <td class="md" valign="top"> ) </td>
389 <td class="md" nowrap></td>
395 <table cellspacing="5" cellpadding="0" border="0">
405 Definition at line <a class="el" href="socket_8cpp-source.html#l00144">144</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
407 References <a class="el" href="socket_8h-source.html#l00043">IP</a>.<div class="fragment"><pre class="fragment"><a name="l00145"></a>00145 {
408 <a name="l00146"></a>00146 <span class="keywordflow">return</span> this-><a class="code" href="classInspSocket.html#IP">IP</a>;
409 <a name="l00147"></a>00147 }
415 <a class="anchor" name="GetState_28_29"></a><!-- doxytag: member="InspSocket::GetState" ref="GetState_28_29" args="()" --><p>
416 <table class="mdTable" cellpadding="2" cellspacing="0">
419 <table cellpadding="0" cellspacing="0" border="0">
421 <td class="md" nowrap valign="top"><a class="el" href="socket_8h.html#InspSocketState">InspSocketState</a> InspSocket::GetState </td>
422 <td class="md" valign="top">( </td>
423 <td class="mdname1" valign="top" nowrap> </td>
424 <td class="md" valign="top"> ) </td>
425 <td class="md" nowrap></td>
431 <table cellspacing="5" cellpadding="0" border="0">
441 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>.
443 References <a class="el" href="socket_8h-source.html#l00036">state</a>.<div class="fragment"><pre class="fragment"><a name="l00242"></a>00242 {
444 <a name="l00243"></a>00243 <span class="keywordflow">return</span> this-><a class="code" href="classInspSocket.html#state">state</a>;
445 <a name="l00244"></a>00244 }
451 <a class="anchor" name="OnClose_28_29"></a><!-- doxytag: member="InspSocket::OnClose" ref="OnClose_28_29" args="()" --><p>
452 <table class="mdTable" cellpadding="2" cellspacing="0">
455 <table cellpadding="0" cellspacing="0" border="0">
457 <td class="md" nowrap valign="top">void InspSocket::OnClose </td>
458 <td class="md" valign="top">( </td>
459 <td class="mdname1" valign="top" nowrap> </td>
460 <td class="md" valign="top"> ) </td>
461 <td class="md" nowrap><code> [virtual]</code></td>
467 <table cellspacing="5" cellpadding="0" border="0">
477 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>.
479 Referenced by <a class="el" href="socket_8cpp-source.html#l00133">Close()</a>.<div class="fragment"><pre class="fragment"><a name="l00252"></a>00252 { <span class="keywordflow">return</span>; }
485 <a class="anchor" name="OnConnected_28_29"></a><!-- doxytag: member="InspSocket::OnConnected" ref="OnConnected_28_29" args="()" --><p>
486 <table class="mdTable" cellpadding="2" cellspacing="0">
489 <table cellpadding="0" cellspacing="0" border="0">
491 <td class="md" nowrap valign="top">bool InspSocket::OnConnected </td>
492 <td class="md" valign="top">( </td>
493 <td class="mdname1" valign="top" nowrap> </td>
494 <td class="md" valign="top"> ) </td>
495 <td class="md" nowrap><code> [virtual]</code></td>
501 <table cellspacing="5" cellpadding="0" border="0">
511 Definition at line <a class="el" href="socket_8cpp-source.html#l00246">246</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
513 Referenced by <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00246"></a>00246 { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
519 <a class="anchor" name="OnDataReady_28_29"></a><!-- doxytag: member="InspSocket::OnDataReady" ref="OnDataReady_28_29" args="()" --><p>
520 <table class="mdTable" cellpadding="2" cellspacing="0">
523 <table cellpadding="0" cellspacing="0" border="0">
525 <td class="md" nowrap valign="top">bool InspSocket::OnDataReady </td>
526 <td class="md" valign="top">( </td>
527 <td class="mdname1" valign="top" nowrap> </td>
528 <td class="md" valign="top"> ) </td>
529 <td class="md" nowrap><code> [virtual]</code></td>
535 <table cellspacing="5" cellpadding="0" border="0">
545 Definition at line <a class="el" href="socket_8cpp-source.html#l00250">250</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
547 Referenced by <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00250"></a>00250 { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
553 <a class="anchor" name="OnDisconnect_28_29"></a><!-- doxytag: member="InspSocket::OnDisconnect" ref="OnDisconnect_28_29" args="()" --><p>
554 <table class="mdTable" cellpadding="2" cellspacing="0">
557 <table cellpadding="0" cellspacing="0" border="0">
559 <td class="md" nowrap valign="top">int InspSocket::OnDisconnect </td>
560 <td class="md" valign="top">( </td>
561 <td class="mdname1" valign="top" nowrap> </td>
562 <td class="md" valign="top"> ) </td>
563 <td class="md" nowrap><code> [virtual]</code></td>
569 <table cellspacing="5" cellpadding="0" border="0">
579 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>.<div class="fragment"><pre class="fragment"><a name="l00248"></a>00248 { <span class="keywordflow">return</span> 0; }
585 <a class="anchor" name="OnError_28InspSocketError_20e_29"></a><!-- doxytag: member="InspSocket::OnError" ref="OnError_28InspSocketError_20e_29" args="(InspSocketError e)" --><p>
586 <table class="mdTable" cellpadding="2" cellspacing="0">
589 <table cellpadding="0" cellspacing="0" border="0">
591 <td class="md" nowrap valign="top">void InspSocket::OnError </td>
592 <td class="md" valign="top">( </td>
593 <td class="md" nowrap valign="top"><a class="el" href="socket_8h.html#InspSocketError">InspSocketError</a> </td>
594 <td class="mdname1" valign="top" nowrap> <em>e</em> </td>
595 <td class="md" valign="top"> ) </td>
596 <td class="md" nowrap><code> [virtual]</code></td>
602 <table cellspacing="5" cellpadding="0" border="0">
612 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>.
614 Referenced by <a class="el" href="socket_8cpp-source.html#l00058">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00247"></a>00247 { <span class="keywordflow">return</span>; }
620 <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>
621 <table class="mdTable" cellpadding="2" cellspacing="0">
624 <table cellpadding="0" cellspacing="0" border="0">
626 <td class="md" nowrap valign="top">int InspSocket::OnIncomingConnection </td>
627 <td class="md" valign="top">( </td>
628 <td class="md" nowrap valign="top">int </td>
629 <td class="mdname" nowrap> <em>newfd</em>, </td>
632 <td class="md" nowrap align="right"></td>
634 <td class="md" nowrap>char * </td>
635 <td class="mdname" nowrap> <em>ip</em></td>
639 <td class="md">) </td>
640 <td class="md" colspan="2"><code> [virtual]</code></td>
646 <table cellspacing="5" cellpadding="0" border="0">
656 Definition at line <a class="el" href="socket_8cpp-source.html#l00249">249</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
658 Referenced by <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00249"></a>00249 { <span class="keywordflow">return</span> 0; }
664 <a class="anchor" name="OnTimeout_28_29"></a><!-- doxytag: member="InspSocket::OnTimeout" ref="OnTimeout_28_29" args="()" --><p>
665 <table class="mdTable" cellpadding="2" cellspacing="0">
668 <table cellpadding="0" cellspacing="0" border="0">
670 <td class="md" nowrap valign="top">void InspSocket::OnTimeout </td>
671 <td class="md" valign="top">( </td>
672 <td class="mdname1" valign="top" nowrap> </td>
673 <td class="md" valign="top"> ) </td>
674 <td class="md" nowrap><code> [virtual]</code></td>
680 <table cellspacing="5" cellpadding="0" border="0">
690 Definition at line <a class="el" href="socket_8cpp-source.html#l00251">251</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
692 Referenced by <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00251"></a>00251 { <span class="keywordflow">return</span>; }
698 <a class="anchor" name="Poll_28_29"></a><!-- doxytag: member="InspSocket::Poll" ref="Poll_28_29" args="()" --><p>
699 <table class="mdTable" cellpadding="2" cellspacing="0">
702 <table cellpadding="0" cellspacing="0" border="0">
704 <td class="md" nowrap valign="top">bool InspSocket::Poll </td>
705 <td class="md" valign="top">( </td>
706 <td class="mdname1" valign="top" nowrap> </td>
707 <td class="md" valign="top"> ) </td>
708 <td class="md" nowrap></td>
714 <table cellspacing="5" cellpadding="0" border="0">
724 Definition at line <a class="el" href="socket_8cpp-source.html#l00191">191</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
726 References <a class="el" href="socket_8h-source.html#l00044">client</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.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#l00246">OnConnected()</a>, <a class="el" href="socket_8cpp-source.html#l00250">OnDataReady()</a>, <a class="el" href="socket_8cpp-source.html#l00247">OnError()</a>, <a class="el" href="socket_8cpp-source.html#l00249">OnIncomingConnection()</a>, <a class="el" href="socket_8cpp-source.html#l00251">OnTimeout()</a>, <a class="el" href="socket_8h-source.html#l00041">polls</a>, <a class="el" href="socket_8cpp-source.html#l00235">SetState()</a>, <a class="el" href="socket_8h-source.html#l00036">state</a>, <a class="el" href="socket_8h-source.html#l00040">timeout</a>, and <a class="el" href="socket_8h-source.html#l00039">timeout_end</a>.<div class="fragment"><pre class="fragment"><a name="l00192"></a>00192 {
727 <a name="l00193"></a>00193 <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>))
728 <a name="l00194"></a>00194 {
729 <a name="l00195"></a>00195 <span class="comment">// for non-listening sockets, the timeout can occur</span>
730 <a name="l00196"></a>00196 <span class="comment">// which causes termination of the connection after</span>
731 <a name="l00197"></a>00197 <span class="comment">// the given number of seconds without a successful</span>
732 <a name="l00198"></a>00198 <span class="comment">// connection.</span>
733 <a name="l00199"></a>00199 this-><a class="code" href="classInspSocket.html#OnTimeout_28_29">OnTimeout</a>();
734 <a name="l00200"></a>00200 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>);
735 <a name="l00201"></a>00201 <a class="code" href="classInspSocket.html#timeout">timeout</a> = <span class="keyword">true</span>;
736 <a name="l00202"></a>00202 this-><a class="code" href="classInspSocket.html#state">state</a> = <a class="code" href="socket_8h.html#InspSocketStateI_5FERROR">I_ERROR</a>;
737 <a name="l00203"></a>00203 <span class="keywordflow">return</span> <span class="keyword">false</span>;
738 <a name="l00204"></a>00204 }
739 <a name="l00205"></a>00205 <a class="code" href="classInspSocket.html#polls">polls</a>.fd = this-><a class="code" href="classInspSocket.html#fd">fd</a>;
740 <a name="l00206"></a>00206 <a class="code" href="classInspSocket.html#state">state</a> == <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a> ? <a class="code" href="classInspSocket.html#polls">polls</a>.events = POLLOUT : <a class="code" href="classInspSocket.html#polls">polls</a>.events = POLLIN;
741 <a name="l00207"></a>00207 <span class="keywordtype">int</span> ret = poll(&<a class="code" href="classInspSocket.html#polls">polls</a>,1,1);
742 <a name="l00208"></a>00208
743 <a name="l00209"></a>00209 <span class="keywordflow">if</span> (ret > 0)
744 <a name="l00210"></a>00210 {
745 <a name="l00211"></a>00211 <span class="keywordtype">int</span> incoming = -1;
746 <a name="l00212"></a>00212
747 <a name="l00213"></a>00213 <span class="keywordflow">switch</span> (this->state)
748 <a name="l00214"></a>00214 {
749 <a name="l00215"></a>00215 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTING">I_CONNECTING</a>:
750 <a name="l00216"></a>00216 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>);
751 <a name="l00217"></a>00217 <span class="keywordflow">return</span> this-><a class="code" href="classInspSocket.html#OnConnected_28_29">OnConnected</a>();
752 <a name="l00218"></a>00218 <span class="keywordflow">break</span>;
753 <a name="l00219"></a>00219 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FLISTENING">I_LISTENING</a>:
754 <a name="l00220"></a>00220 <a class="code" href="classInspSocket.html#length">length</a> = <span class="keyword">sizeof</span> (<a class="code" href="classInspSocket.html#client">client</a>);
755 <a name="l00221"></a>00221 incoming = accept (this->fd, (sockaddr*)&<a class="code" href="classInspSocket.html#client">client</a>,&<a class="code" href="classInspSocket.html#length">length</a>);
756 <a name="l00222"></a>00222 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));
757 <a name="l00223"></a>00223 <span class="keywordflow">return</span> <span class="keyword">true</span>;
758 <a name="l00224"></a>00224 <span class="keywordflow">break</span>;
759 <a name="l00225"></a>00225 <span class="keywordflow">case</span> <a class="code" href="socket_8h.html#InspSocketStateI_5FCONNECTED">I_CONNECTED</a>:
760 <a name="l00226"></a>00226 <span class="keywordflow">return</span> this-><a class="code" href="classInspSocket.html#OnDataReady_28_29">OnDataReady</a>();
761 <a name="l00227"></a>00227 <span class="keywordflow">break</span>;
762 <a name="l00228"></a>00228 <span class="keywordflow">default</span>:
763 <a name="l00229"></a>00229 <span class="keywordflow">break</span>;
764 <a name="l00230"></a>00230 }
765 <a name="l00231"></a>00231 }
766 <a name="l00232"></a>00232 <span class="keywordflow">return</span> <span class="keyword">true</span>;
767 <a name="l00233"></a>00233 }
773 <a class="anchor" name="Read_28_29"></a><!-- doxytag: member="InspSocket::Read" ref="Read_28_29" args="()" --><p>
774 <table class="mdTable" cellpadding="2" cellspacing="0">
777 <table cellpadding="0" cellspacing="0" border="0">
779 <td class="md" nowrap valign="top">char * InspSocket::Read </td>
780 <td class="md" valign="top">( </td>
781 <td class="mdname1" valign="top" nowrap> </td>
782 <td class="md" valign="top"> ) </td>
783 <td class="md" nowrap><code> [virtual]</code></td>
789 <table cellspacing="5" cellpadding="0" border="0">
799 Definition at line <a class="el" href="socket_8cpp-source.html#l00149">149</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
801 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="l00150"></a>00150 {
802 <a name="l00151"></a>00151 <span class="keywordtype">int</span> n = recv(this->fd,this->ibuf,<span class="keyword">sizeof</span>(this->ibuf),0);
803 <a name="l00152"></a>00152 <span class="keywordflow">if</span> (n > 0)
804 <a name="l00153"></a>00153 {
805 <a name="l00154"></a>00154 <a class="code" href="classInspSocket.html#ibuf_5B_31_36_33_38_34_5D">ibuf</a>[n] = 0;
806 <a name="l00155"></a>00155 <span class="keywordflow">return</span> <a class="code" href="classInspSocket.html#ibuf_5B_31_36_33_38_34_5D">ibuf</a>;
807 <a name="l00156"></a>00156 }
808 <a name="l00157"></a>00157 <span class="keywordflow">else</span>
809 <a name="l00158"></a>00158 {
810 <a name="l00159"></a>00159 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"EOF or error on socket"</span>);
811 <a name="l00160"></a>00160 <span class="keywordflow">return</span> NULL;
812 <a name="l00161"></a>00161 }
813 <a name="l00162"></a>00162 }
819 <a class="anchor" name="SetState_28InspSocketState_20s_29"></a><!-- doxytag: member="InspSocket::SetState" ref="SetState_28InspSocketState_20s_29" args="(InspSocketState s)" --><p>
820 <table class="mdTable" cellpadding="2" cellspacing="0">
823 <table cellpadding="0" cellspacing="0" border="0">
825 <td class="md" nowrap valign="top">void InspSocket::SetState </td>
826 <td class="md" valign="top">( </td>
827 <td class="md" nowrap valign="top"><a class="el" href="socket_8h.html#InspSocketState">InspSocketState</a> </td>
828 <td class="mdname1" valign="top" nowrap> <em>s</em> </td>
829 <td class="md" valign="top"> ) </td>
830 <td class="md" nowrap></td>
836 <table cellspacing="5" cellpadding="0" border="0">
846 Definition at line <a class="el" href="socket_8cpp-source.html#l00235">235</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.
848 References <a class="el" href="modules_8h-source.html#l00023">DEBUG</a>, and <a class="el" href="socket_8h-source.html#l00036">state</a>.
850 Referenced by <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>.<div class="fragment"><pre class="fragment"><a name="l00236"></a>00236 {
851 <a name="l00237"></a>00237 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"Socket state change"</span>);
852 <a name="l00238"></a>00238 this-><a class="code" href="classInspSocket.html#state">state</a> = s;
853 <a name="l00239"></a>00239 }
859 <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>
860 <table class="mdTable" cellpadding="2" cellspacing="0">
863 <table cellpadding="0" cellspacing="0" border="0">
865 <td class="md" nowrap valign="top">int InspSocket::Write </td>
866 <td class="md" valign="top">( </td>
867 <td class="md" nowrap valign="top"><a class="el" href="namespaceirc.html#string">std::string</a> </td>
868 <td class="mdname1" valign="top" nowrap> <em>data</em> </td>
869 <td class="md" valign="top"> ) </td>
870 <td class="md" nowrap><code> [virtual]</code></td>
876 <table cellspacing="5" cellpadding="0" border="0">
886 Definition at line <a class="el" href="socket_8cpp-source.html#l00168">168</a> of file <a class="el" href="socket_8cpp-source.html">socket.cpp</a>.<div class="fragment"><pre class="fragment"><a name="l00169"></a>00169 {
887 <a name="l00170"></a>00170 <span class="keywordtype">char</span>* d = (<span class="keywordtype">char</span>*)data.c_str();
888 <a name="l00171"></a>00171 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> written = 0;
889 <a name="l00172"></a>00172 <span class="keywordtype">int</span> n = 0;
890 <a name="l00173"></a>00173 <span class="keywordtype">int</span> s = data.length();
891 <a name="l00174"></a>00174 <span class="keywordflow">while</span> ((written < data.length()) && (n >= 0))
892 <a name="l00175"></a>00175 {
893 <a name="l00176"></a>00176 n = send(this->fd,d,s,0);
894 <a name="l00177"></a>00177 <span class="keywordflow">if</span> (n > 0)
895 <a name="l00178"></a>00178 {
896 <a name="l00179"></a>00179 <span class="comment">// If we didnt write everything, advance</span>
897 <a name="l00180"></a>00180 <span class="comment">// the pointers so that when we retry</span>
898 <a name="l00181"></a>00181 <span class="comment">// the next time around the loop, we try</span>
899 <a name="l00182"></a>00182 <span class="comment">// to write what we failed to write before.</span>
900 <a name="l00183"></a>00183 written += n;
901 <a name="l00184"></a>00184 s -= n;
902 <a name="l00185"></a>00185 d += n;
903 <a name="l00186"></a>00186 }
904 <a name="l00187"></a>00187 }
905 <a name="l00188"></a>00188 <span class="keywordflow">return</span> written;
906 <a name="l00189"></a>00189 }
912 <hr><h2>Member Data Documentation</h2>
913 <a class="anchor" name="addr"></a><!-- doxytag: member="InspSocket::addr" ref="addr" args="" --><p>
914 <table class="mdTable" cellpadding="2" cellspacing="0">
917 <table cellpadding="0" cellspacing="0" border="0">
919 <td class="md" nowrap valign="top">sockaddr_in <a class="el" href="classInspSocket.html#addr">InspSocket::addr</a><code> [private]</code> </td>
925 <table cellspacing="5" cellpadding="0" border="0">
935 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>.
937 Referenced by <a class="el" href="socket_8cpp-source.html#l00058">InspSocket()</a>. </td>
940 <a class="anchor" name="addy"></a><!-- doxytag: member="InspSocket::addy" ref="addy" args="" --><p>
941 <table class="mdTable" cellpadding="2" cellspacing="0">
944 <table cellpadding="0" cellspacing="0" border="0">
946 <td class="md" nowrap valign="top">in_addr <a class="el" href="classInspSocket.html#addy">InspSocket::addy</a><code> [private]</code> </td>
952 <table cellspacing="5" cellpadding="0" border="0">
962 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>.
964 Referenced by <a class="el" href="socket_8cpp-source.html#l00058">InspSocket()</a>. </td>
967 <a class="anchor" name="client"></a><!-- doxytag: member="InspSocket::client" ref="client" args="" --><p>
968 <table class="mdTable" cellpadding="2" cellspacing="0">
971 <table cellpadding="0" cellspacing="0" border="0">
973 <td class="md" nowrap valign="top">sockaddr_in <a class="el" href="classInspSocket.html#client">InspSocket::client</a><code> [private]</code> </td>
979 <table cellspacing="5" cellpadding="0" border="0">
989 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>.
991 Referenced by <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>. </td>
994 <a class="anchor" name="fd"></a><!-- doxytag: member="InspSocket::fd" ref="fd" args="" --><p>
995 <table class="mdTable" cellpadding="2" cellspacing="0">
998 <table cellpadding="0" cellspacing="0" border="0">
1000 <td class="md" nowrap valign="top">int <a class="el" href="classInspSocket.html#fd">InspSocket::fd</a><code> [private]</code> </td>
1006 <table cellspacing="5" cellpadding="0" border="0">
1016 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>.
1018 Referenced by <a class="el" href="socket_8cpp-source.html#l00133">Close()</a>, <a class="el" href="socket_8cpp-source.html#l00051">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>. </td>
1021 <a class="anchor" name="host"></a><!-- doxytag: member="InspSocket::host" ref="host" args="" --><p>
1022 <table class="mdTable" cellpadding="2" cellspacing="0">
1025 <table cellpadding="0" cellspacing="0" border="0">
1027 <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>
1033 <table cellspacing="5" cellpadding="0" border="0">
1043 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>
1046 <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>
1047 <table class="mdTable" cellpadding="2" cellspacing="0">
1050 <table cellpadding="0" cellspacing="0" border="0">
1052 <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>
1058 <table cellspacing="5" cellpadding="0" border="0">
1068 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>.
1070 Referenced by <a class="el" href="socket_8cpp-source.html#l00149">Read()</a>. </td>
1073 <a class="anchor" name="IP"></a><!-- doxytag: member="InspSocket::IP" ref="IP" args="" --><p>
1074 <table class="mdTable" cellpadding="2" cellspacing="0">
1077 <table cellpadding="0" cellspacing="0" border="0">
1079 <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>
1085 <table cellspacing="5" cellpadding="0" border="0">
1095 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>.
1097 Referenced by <a class="el" href="socket_8cpp-source.html#l00144">GetIP()</a>, and <a class="el" href="socket_8cpp-source.html#l00051">InspSocket()</a>. </td>
1100 <a class="anchor" name="length"></a><!-- doxytag: member="InspSocket::length" ref="length" args="" --><p>
1101 <table class="mdTable" cellpadding="2" cellspacing="0">
1104 <table cellpadding="0" cellspacing="0" border="0">
1106 <td class="md" nowrap valign="top">socklen_t <a class="el" href="classInspSocket.html#length">InspSocket::length</a><code> [private]</code> </td>
1112 <table cellspacing="5" cellpadding="0" border="0">
1122 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>.
1124 Referenced by <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>. </td>
1127 <a class="anchor" name="polls"></a><!-- doxytag: member="InspSocket::polls" ref="polls" args="" --><p>
1128 <table class="mdTable" cellpadding="2" cellspacing="0">
1131 <table cellpadding="0" cellspacing="0" border="0">
1133 <td class="md" nowrap valign="top">pollfd <a class="el" href="classInspSocket.html#polls">InspSocket::polls</a><code> [private]</code> </td>
1139 <table cellspacing="5" cellpadding="0" border="0">
1149 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>.
1151 Referenced by <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>. </td>
1154 <a class="anchor" name="port"></a><!-- doxytag: member="InspSocket::port" ref="port" args="" --><p>
1155 <table class="mdTable" cellpadding="2" cellspacing="0">
1158 <table cellpadding="0" cellspacing="0" border="0">
1160 <td class="md" nowrap valign="top">int <a class="el" href="classInspSocket.html#port">InspSocket::port</a><code> [private]</code> </td>
1166 <table cellspacing="5" cellpadding="0" border="0">
1176 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>
1179 <a class="anchor" name="server"></a><!-- doxytag: member="InspSocket::server" ref="server" args="" --><p>
1180 <table class="mdTable" cellpadding="2" cellspacing="0">
1183 <table cellpadding="0" cellspacing="0" border="0">
1185 <td class="md" nowrap valign="top">sockaddr_in <a class="el" href="classInspSocket.html#server">InspSocket::server</a><code> [private]</code> </td>
1191 <table cellspacing="5" cellpadding="0" border="0">
1201 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>
1204 <a class="anchor" name="state"></a><!-- doxytag: member="InspSocket::state" ref="state" args="" --><p>
1205 <table class="mdTable" cellpadding="2" cellspacing="0">
1208 <table cellpadding="0" cellspacing="0" border="0">
1210 <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>
1216 <table cellspacing="5" cellpadding="0" border="0">
1226 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>.
1228 Referenced by <a class="el" href="socket_8cpp-source.html#l00241">GetState()</a>, <a class="el" href="socket_8cpp-source.html#l00046">InspSocket()</a>, <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>, and <a class="el" href="socket_8cpp-source.html#l00235">SetState()</a>. </td>
1231 <a class="anchor" name="timeout"></a><!-- doxytag: member="InspSocket::timeout" ref="timeout" args="" --><p>
1232 <table class="mdTable" cellpadding="2" cellspacing="0">
1235 <table cellpadding="0" cellspacing="0" border="0">
1237 <td class="md" nowrap valign="top">bool <a class="el" href="classInspSocket.html#timeout">InspSocket::timeout</a><code> [private]</code> </td>
1243 <table cellspacing="5" cellpadding="0" border="0">
1253 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>.
1255 Referenced by <a class="el" href="socket_8cpp-source.html#l00058">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>. </td>
1258 <a class="anchor" name="timeout_5Fend"></a><!-- doxytag: member="InspSocket::timeout_end" ref="timeout_5Fend" args="" --><p>
1259 <table class="mdTable" cellpadding="2" cellspacing="0">
1262 <table cellpadding="0" cellspacing="0" border="0">
1264 <td class="md" nowrap valign="top">time_t <a class="el" href="classInspSocket.html#timeout_5Fend">InspSocket::timeout_end</a><code> [private]</code> </td>
1270 <table cellspacing="5" cellpadding="0" border="0">
1280 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>.
1282 Referenced by <a class="el" href="socket_8cpp-source.html#l00058">InspSocket()</a>, and <a class="el" href="socket_8cpp-source.html#l00191">Poll()</a>. </td>
1285 <hr>The documentation for this class was generated from the following files:<ul>
1286 <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>
1287 <hr size="1"><address style="align: right;"><small>Generated on Fri Dec 9 20:20:12 2005 for InspIRCd by
1288 <a href="http://www.doxygen.org/index.html">
1289 <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4-20050815 </small></address>