📄 pinet.h.html
字号:
<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> ipaddress ip; <font CLASS=comment>// target IP</font> string host; <font CLASS=comment>// target host name; either IP or hostname must be specified</font> <font CLASS=keytype>int</font> port; <font CLASS=comment>// target port number</font> <font CLASS=keytype>void</font> notfound(); <font CLASS=comment>// throws a (estream*) exception</font> <font CLASS=keyword>friend</font> <font CLASS=keytype>bool</font> psockname(<font CLASS=keytype>int</font>, ippeerinfo&);<font CLASS=preproc><font CLASS=keyword>public</font>:</font> ippeerinfo(); ippeerinfo(ipaddress iip, <font CLASS=keyword>const</font> string& ihost, <font CLASS=keytype>int</font> iport); ipaddress get_ip(); <font CLASS=comment>// resolves the host name if necessary (only once)</font> string get_host(); <font CLASS=comment>// performs reverse-lookup if necessary (only once)</font> <font CLASS=keytype>int</font> get_port() { <font CLASS=keyword>return</font> port; } <font CLASS=keytype>void</font> clear(); string asstring(<font CLASS=keytype>bool</font> showport) <font CLASS=keyword>const</font>;};string iptostring(ipaddress ip);ipaddress phostbyname(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* name);string phostbyaddr(ipaddress ip);string phostcname(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* name);<font CLASS=comment>// internal utilities</font><font CLASS=keytype>int</font> usockerrno();<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* usockerrmsg(<font CLASS=keytype>int</font> code);<font CLASS=keytype>bool</font> psockwait(<font CLASS=keytype>int</font> handle, <font CLASS=keytype>int</font> timeout);<font CLASS=keytype>bool</font> psockname(<font CLASS=keytype>int</font> handle, ippeerinfo&);<font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// --- TCP socket classes -------------------------------------------- //</font><font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// additional IO status codes</font><font CLASS=keyword>const</font> <font CLASS=keytype>int</font> IO_RESOLVING <font CLASS=symbols>=</font> <font CLASS=integer>10</font>;<font CLASS=keyword>const</font> <font CLASS=keytype>int</font> IO_RESOLVED <font CLASS=symbols>=</font> <font CLASS=integer>11</font>;<font CLASS=keyword>const</font> <font CLASS=keytype>int</font> IO_CONNECTING <font CLASS=symbols>=</font> <font CLASS=integer>20</font>;<font CLASS=keyword>const</font> <font CLASS=keytype>int</font> IO_CONNECTED <font CLASS=symbols>=</font> <font CLASS=integer>21</font>;<font CLASS=comment>//</font><font CLASS=comment>// ipstream</font><font CLASS=comment>//</font><font CLASS=keyword>class</font> ipstream: public fdxstm, <font CLASS=keyword>public</font> ippeerinfo{ <font CLASS=keyword>friend</font> <font CLASS=keyword>class</font> ipstmserver;<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> <font CLASS=keytype>int</font> svsocket; <font CLASS=comment>// server socket descriptor, used internally by ipstmserver</font><font CLASS=preproc>#ifdef</font> WIN32 // A citation from MSDN: <font CLASS=dblquot>"While nothing in the Windows Sockets prevents an // implementation from using regular file handles to identify sockets, nothing requires // it either"</font>. Nothing requires us to spend less time writing programs? <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> dorawread(<font CLASS=keytype>char</font>* buf, <font CLASS=keytype>int</font> count); <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> dorawwrite(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* buf, <font CLASS=keytype>int</font> count);<font CLASS=preproc>#endif</font> <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> uerrno(); <font CLASS=keyword>virtual</font> <font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* uerrmsg(<font CLASS=keytype>int</font> code); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> doopen(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> doseek(<font CLASS=keytype>int</font> newpos, ioseekmode mode); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> doclose(); <font CLASS=keytype>void</font> closehandle();<font CLASS=preproc><font CLASS=keyword>public</font>:</font> ipstream(); ipstream(ipaddress ip, <font CLASS=keytype>int</font> port); ipstream(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* host, <font CLASS=keytype>int</font> port); ipstream(<font CLASS=keyword>const</font> string& host, <font CLASS=keytype>int</font> port); <font CLASS=keyword>virtual</font> ~ipstream(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> classid(); <font CLASS=keyword>virtual</font> string get_streamname(); <font CLASS=keytype>bool</font> waitfor(<font CLASS=keytype>int</font> timeout); ipaddress get_myip(); <font CLASS=keytype>int</font> get_myport(); <font CLASS=keytype>void</font> set_ip(ipaddress); <font CLASS=keytype>void</font> set_host(<font CLASS=keyword>const</font> string&); <font CLASS=keytype>void</font> set_host(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>*); <font CLASS=keytype>void</font> set_port(<font CLASS=keytype>int</font>);};<font CLASS=comment>//</font><font CLASS=comment>// common internal interfaces for ipstmserver and ipmsgserver</font><font CLASS=comment>//</font><font CLASS=keyword>class</font> ipbindinfo: <font CLASS=keyword>public</font> unknown, <font CLASS=keyword>public</font> ippeerinfo{<font CLASS=preproc><font CLASS=keyword>public</font>:</font> <font CLASS=keytype>int</font> handle; ipbindinfo(ipaddress iip, <font CLASS=keyword>const</font> string& ihost, <font CLASS=keytype>int</font> iport); <font CLASS=keyword>virtual</font> ~ipbindinfo();};<font CLASS=keyword>class</font> ipsvbase: public unknown{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> <font CLASS=keytype>int</font> socktype; <font CLASS=keytype>bool</font> active; tobjlist<ipbindinfo> addrlist; <font CLASS=comment>// list of local socket addresses to bind to</font> <font CLASS=keytype>void</font> error(ippeerinfo& peer, <font CLASS=keytype>int</font> code, <font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* defmsg); <font CLASS=keytype>bool</font> dopoll(<font CLASS=keytype>int</font>* i, <font CLASS=keytype>int</font> timeout); <font CLASS=keytype>void</font> setupfds(<font CLASS=keytype>void</font>* set, <font CLASS=keytype>int</font> i); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> open(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> close(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> dobind(ipbindinfo*) <font CLASS=symbols>=</font> <font CLASS=integer>0</font>;<font CLASS=preproc><font CLASS=keyword>public</font>:</font> ipsvbase(<font CLASS=keytype>int</font> isocktype); <font CLASS=keyword>virtual</font> ~ipsvbase(); <font CLASS=keytype>int</font> bind(ipaddress ip, <font CLASS=keytype>int</font> port); <font CLASS=keytype>int</font> bindall(<font CLASS=keytype>int</font> port); <font CLASS=keytype>int</font> get_addrcount() { <font CLASS=keyword>return</font> addrlist.get_count(); } <font CLASS=keyword>const</font> ipbindinfo& get_addr(<font CLASS=keytype>int</font> i) { <font CLASS=keyword>return</font> *addrlist[i]; } <font CLASS=keytype>void</font> clear();};<font CLASS=comment>//</font><font CLASS=comment>// ipstmserver</font><font CLASS=comment>//</font><font CLASS=keyword>class</font> ipstmserver: public ipsvbase{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> dobind(ipbindinfo*);<font CLASS=preproc><font CLASS=keyword>public</font>:</font> ipstmserver(); <font CLASS=keyword>virtual</font> ~ipstmserver(); <font CLASS=keytype>bool</font> poll(<font CLASS=keytype>int</font> i <font CLASS=symbols>=</font> <font CLASS=symbols>-</font><font CLASS=integer>1</font>, <font CLASS=keytype>int</font> timeout = <font CLASS=integer>0</font>); <font CLASS=keytype>bool</font> serve(ipstream& client, <font CLASS=keytype>int</font> i <font CLASS=symbols>=</font> <font CLASS=symbols>-</font><font CLASS=integer>1</font>, <font CLASS=keytype>int</font> timeout = -<font CLASS=integer>1</font>);};<font CLASS=preproc>#ifdef</font> PTYPES18_COMPAT <font CLASS=keyword>typedef</font> ipstream ipsocket; <font CLASS=comment>// pre-1.7 compatibility aliases</font> <font CLASS=keyword>typedef</font> ipstmserver ipserver;<font CLASS=preproc>#endif</font> <font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// --- UDP socket classes -------------------------------------------- //</font><font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>//</font><font CLASS=comment>// ipmessage</font><font CLASS=comment>//</font><font CLASS=keyword>class</font> ipmessage: public unknown, <font CLASS=keyword>public</font> ippeerinfo{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> <font CLASS=keytype>int</font> handle; <font CLASS=keytype>void</font> error(<font CLASS=keytype>int</font> code, <font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* msg); <font CLASS=keytype>void</font> open(); <font CLASS=keytype>void</font> close();<font CLASS=preproc><font CLASS=keyword>public</font>:</font> ipmessage(); ipmessage(ipaddress ip, <font CLASS=keytype>int</font> port); ipmessage(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* host, <font CLASS=keytype>int</font> port); ipmessage(<font CLASS=keyword>const</font> string& host, <font CLASS=keytype>int</font> port); <font CLASS=keyword>virtual</font> ~ipmessage(); <font CLASS=keytype>void</font> set_ip(ipaddress iip); <font CLASS=keytype>void</font> set_host(<font CLASS=keyword>const</font> string&); <font CLASS=keytype>void</font> set_host(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>*); <font CLASS=keytype>void</font> set_port(<font CLASS=keytype>int</font>); ipaddress get_myip(); <font CLASS=keytype>int</font> get_myport(); <font CLASS=keytype>int</font> get_handle() { <font CLASS=keyword>return</font> handle; } <font CLASS=keytype>bool</font> waitfor(<font CLASS=keytype>int</font> timeout); <font CLASS=keytype>int</font> receive(<font CLASS=keytype>char</font>* buf, <font CLASS=keytype>int</font> count, ipaddress& src); <font CLASS=keytype>int</font> receive(<font CLASS=keytype>char</font>* buf, <font CLASS=keytype>int</font> count); string receive(<font CLASS=keytype>int</font> max, ipaddress& src); string receive(<font CLASS=keytype>int</font> max); <font CLASS=keytype>void</font> send(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* buf, <font CLASS=keytype>int</font> count); <font CLASS=keytype>void</font> send(<font CLASS=keyword>const</font> string& s) { send(s, length(s)); }};<font CLASS=comment>//</font><font CLASS=comment>// ipmsgserver</font><font CLASS=comment>//</font><font CLASS=keyword>class</font> ipmsgserver: public ipsvbase, <font CLASS=keyword>public</font> ippeerinfo{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> <font CLASS=keytype>int</font> handle; <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> close(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> dobind(ipbindinfo*);<font CLASS=preproc><font CLASS=keyword>public</font>:</font> ipmsgserver(); <font CLASS=keyword>virtual</font> ~ipmsgserver(); <font CLASS=keytype>int</font> get_handle() { <font CLASS=keyword>return</font> handle; } <font CLASS=keytype>bool</font> poll(<font CLASS=keytype>int</font> i <font CLASS=symbols>=</font> <font CLASS=symbols>-</font><font CLASS=integer>1</font>, <font CLASS=keytype>int</font> timeout = <font CLASS=integer>0</font>); <font CLASS=keytype>int</font> receive(<font CLASS=keytype>char</font>* buf, <font CLASS=keytype>int</font> count); string receive(<font CLASS=keytype>int</font> max); <font CLASS=keytype>void</font> send(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* buf, <font CLASS=keytype>int</font> count); <font CLASS=keytype>void</font> send(<font CLASS=keyword>const</font> string& s) { send(s, length(s)); } <font CLASS=keytype>void</font> sendto(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* buf, <font CLASS=keytype>int</font> count, ipaddress ip, <font CLASS=keytype>int</font> port); <font CLASS=keytype>void</font> sendto(<font CLASS=keyword>const</font> string& s, ipaddress ip, <font CLASS=keytype>int</font> port) { sendto(s, length(s), ip, port); }};<font CLASS=preproc>#ifdef</font> _MSC_VER <font CLASS=preproc>#pragma</font> pack(pop) <font CLASS=preproc>#endif</font> PTYPES_END<font CLASS=preproc>#endif</font> <font CLASS=comment>// __PINET_H__ </font></pre></div><hr noshade></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -