ptypes

ptypes Mercurial Source Tree


Root/doc/include/pinet.h.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<!--
Syntax highlighting generated by Web C Plus Plus software v0.8.4
Webcpp Copyright (C)2001-2004 Jeffrey Bakker under the GNU GPL
Get webcpp at http://webcpp.sf.net
-->

<html>
<head>
<title>pinet.h</title>
<style type="text/css">

/*
Webcpp v0.8.1 compatible StyleSheet
http://webcpp.sf.net
Theme: ide-msvcpp
*/

body
{
background-color: #ffffff
}

.webcpp a:link    {color:#000000}
.webcpp a:visited {color:#008000}
.webcpp a:active  {color:#0000ff}
.webcpp a:hover   {color:#0000ff}

.webcpp pre
{
color: #000000
}

.webcpp font
{
font-size:100%
}

.webcpp .symbols
{
color: #000000
}

.webcpp .preproc
{
color: #0000ff
}

.webcpp .integer
{
color: #000000
}

.webcpp .floatpt
{
color: #000000
}

.webcpp .dblquot
{
color: #000000
}

.webcpp .sinquot
{
color: #000000
}

.webcpp .keyword
{
color: #0000ff;

}

.webcpp .keytype
{
color: #0000ff;

}

.webcpp .comment
{
color: #008000;

}

</style>
</head>
<body bgcolor="#FFFFFF" leftmargin="40" marginwidth="40"> <p><a href="../htsrc.html">Index</a><hr noshade></p>

<div class="webcpp">
<pre>


<font CLASS=preproc>#ifndef</font> __PINET_H__ 
<font CLASS=preproc>#define</font> __PINET_H__ 

<font CLASS=preproc>#ifndef</font> __PPORT_H__ 
<font CLASS=preproc>#include</font> <font CLASS=dblquot>"pport.h"</font> 
<font CLASS=preproc>#endif</font> 

<font CLASS=preproc>#ifndef</font> __PTYPES_H__ 
<font CLASS=preproc>#include</font> <font CLASS=dblquot>"ptypes.h"</font> 
<font CLASS=preproc>#endif</font> 

<font CLASS=preproc>#ifndef</font> __PSTREAMS_H__ 
<font CLASS=preproc>#include</font> <font CLASS=dblquot>"pstreams.h"</font> 
<font CLASS=preproc>#endif</font> 


<font CLASS=preproc>#ifdef</font> WIN32 
<font CLASS=preproc>#</font>  include <winsock2.h> 
<font CLASS=preproc>#else</font> 
<font CLASS=preproc>#</font>  include <netdb.h>       <font CLASS=comment>// for socklen_t </font>
<font CLASS=preproc>#</font>  include <sys/types.h> 
<font CLASS=preproc>#</font>  include <sys/socket.h> 
<font CLASS=preproc>#endif</font> 


PTYPES_BEGIN


<font CLASS=preproc>#ifdef</font> _MSC_VER 
<font CLASS=preproc>#pragma</font> pack(push, <font CLASS=integer>4</font>) 
<font CLASS=preproc>#endif</font> 


<font CLASS=comment>//</font>
<font CLASS=comment>// BSD-compatible socket error codes for Win32</font>
<font CLASS=comment>//</font>

<font CLASS=preproc>#if</font> defined(WSAENOTSOCK) && !defined(ENOTSOCK) 

<font CLASS=preproc>#define</font> EWOULDBLOCK             WSAEWOULDBLOCK 
<font CLASS=preproc>#define</font> EINPROGRESS             WSAEINPROGRESS 
<font CLASS=preproc>#define</font> EALREADY                WSAEALREADY 
<font CLASS=preproc>#define</font> ENOTSOCK                WSAENOTSOCK 
<font CLASS=preproc>#define</font> EDESTADDRREQ            WSAEDESTADDRREQ 
<font CLASS=preproc>#define</font> EMSGSIZE                WSAEMSGSIZE 
<font CLASS=preproc>#define</font> EPROTOTYPE              WSAEPROTOTYPE 
<font CLASS=preproc>#define</font> ENOPROTOOPT             WSAENOPROTOOPT 
<font CLASS=preproc>#define</font> EPROTONOSUPPORT         WSAEPROTONOSUPPORT 
<font CLASS=preproc>#define</font> ESOCKTNOSUPPORT         WSAESOCKTNOSUPPORT 
<font CLASS=preproc>#define</font> EOPNOTSUPP              WSAEOPNOTSUPP 
<font CLASS=preproc>#define</font> EPFNOSUPPORT            WSAEPFNOSUPPORT 
<font CLASS=preproc>#define</font> EAFNOSUPPORT            WSAEAFNOSUPPORT 
<font CLASS=preproc>#define</font> EADDRINUSE              WSAEADDRINUSE 
<font CLASS=preproc>#define</font> EADDRNOTAVAIL           WSAEADDRNOTAVAIL 
<font CLASS=preproc>#define</font> ENETDOWN                WSAENETDOWN 
<font CLASS=preproc>#define</font> ENETUNREACH             WSAENETUNREACH 
<font CLASS=preproc>#define</font> ENETRESET               WSAENETRESET 
<font CLASS=preproc>#define</font> ECONNABORTED            WSAECONNABORTED 
<font CLASS=preproc>#define</font> ECONNRESET              WSAECONNRESET 
<font CLASS=preproc>#define</font> ENOBUFS                 WSAENOBUFS 
<font CLASS=preproc>#define</font> EISCONN                 WSAEISCONN 
<font CLASS=preproc>#define</font> ENOTCONN                WSAENOTCONN 
<font CLASS=preproc>#define</font> ESHUTDOWN               WSAESHUTDOWN 
<font CLASS=preproc>#define</font> ETOOMANYREFS            WSAETOOMANYREFS 
<font CLASS=preproc>#define</font> ETIMEDOUT               WSAETIMEDOUT 
<font CLASS=preproc>#define</font> ECONNREFUSED            WSAECONNREFUSED 
<font CLASS=preproc>#define</font> ELOOP                   WSAELOOP 
<font CLASS=comment>// #define ENAMETOOLONG            WSAENAMETOOLONG</font>
<font CLASS=preproc>#define</font> EHOSTDOWN               WSAEHOSTDOWN 
<font CLASS=preproc>#define</font> EHOSTUNREACH            WSAEHOSTUNREACH 
<font CLASS=comment>// #define ENOTEMPTY               WSAENOTEMPTY</font>
<font CLASS=preproc>#define</font> EPROCLIM                WSAEPROCLIM 
<font CLASS=preproc>#define</font> EUSERS                  WSAEUSERS 
<font CLASS=preproc>#define</font> EDQUOT                  WSAEDQUOT 
<font CLASS=preproc>#define</font> ESTALE                  WSAESTALE 
<font CLASS=preproc>#define</font> EREMOTE                 WSAEREMOTE 

<font CLASS=comment>// NOTE: these are not errno constants in UNIX!</font>
<font CLASS=preproc>#define</font> HOST_NOT_FOUND          WSAHOST_NOT_FOUND 
<font CLASS=preproc>#define</font> TRY_AGAIN               WSATRY_AGAIN 
<font CLASS=preproc>#define</font> NO_RECOVERY             WSANO_RECOVERY 
<font CLASS=preproc>#define</font> NO_DATA                 WSANO_DATA 

<font CLASS=preproc>#endif</font> 


<font CLASS=comment>// shutdown() constants</font>

<font CLASS=preproc>#if</font> defined(SD_RECEIVE) && !defined(SHUT_RD) 
<font CLASS=preproc>#</font>  define SHUT_RD       SD_RECEIVE 
<font CLASS=preproc>#</font>  define SHUT_WR       SD_SEND 
<font CLASS=preproc>#</font>  define SHUT_RDWR     SD_BOTH 
<font CLASS=preproc>#endif</font> 


<font CLASS=comment>// max backlog value for listen()</font>

<font CLASS=preproc>#ifndef</font> SOMAXCONN 
<font CLASS=preproc>#</font>  define SOMAXCONN <font CLASS=symbols>-</font><font CLASS=integer>1</font> 
<font CLASS=preproc>#endif</font> 

<font CLASS=keyword>typedef</font> <font CLASS=keytype>char</font>* sockval_t;

<font CLASS=preproc>#ifndef</font> WIN32 
<font CLASS=preproc>#</font>  define closesocket close 
<font CLASS=preproc>#endif</font> 


<font CLASS=preproc>#if</font> (defined(__DARWIN__) && !defined(_SOCKLEN_T)) <font CLASS=symbols>||</font> defined(WIN32) <font CLASS=symbols>||</font> defined(__hpux) 
  <font CLASS=keyword>typedef</font> <font CLASS=keytype>int</font> psocklen;
<font CLASS=preproc>#else</font> 
  <font CLASS=keyword>typedef</font> socklen_t psocklen;
<font CLASS=preproc>#endif</font> 


<font CLASS=comment>// -------------------------------------------------------------------- //</font>
<font CLASS=comment>// ---  IP address class and DNS utilities ---------------------------- //</font>
<font CLASS=comment>// -------------------------------------------------------------------- //</font>

<font CLASS=comment>//</font>
<font CLASS=comment>// IP address</font>
<font CLASS=comment>//</font>

<font CLASS=keyword>struct</font> ipaddress
{
<font CLASS=preproc><font CLASS=keyword>public</font>:</font>
    <font CLASS=keyword>union</font>
    {
        uchar   data[<font CLASS=integer>4</font>];
        ulong   ldata;
    };
    ipaddress()                                 {}
    ipaddress(ulong a)                          { ldata <font CLASS=symbols>=</font> a; }
    ipaddress(<font CLASS=keyword>const</font> ipaddress& a)               { ldata <font CLASS=symbols>=</font> a.ldata; }
    ipaddress(<font CLASS=keytype>int</font> a, <font CLASS=keytype>int</font> b, <font CLASS=keytype>int</font> c, <font CLASS=keytype>int</font> d);
    ipaddress& <font CLASS=keyword>operator</font><font CLASS=symbols>=</font> (ulong a)              { ldata <font CLASS=symbols>=</font> a; <font CLASS=keyword>return</font> *<font CLASS=keyword>this</font>; }
    ipaddress& <font CLASS=keyword>operator</font><font CLASS=symbols>=</font> (<font CLASS=keyword>const</font> ipaddress& a)   { ldata <font CLASS=symbols>=</font> a.ldata; <font CLASS=keyword>return</font> *<font CLASS=keyword>this</font>; }
    uchar& <font CLASS=keyword>operator</font> [] (<font CLASS=keytype>int</font> i)                  { <font CLASS=keyword>return</font> data[i]; }
    <font CLASS=keyword>operator</font> ulong() <font CLASS=keyword>const</font>                      { <font CLASS=keyword>return</font> ldata; }
};


<font CLASS=keyword>extern</font> ipaddress ipnone;
<font CLASS=keyword>extern</font> ipaddress ipany;
<font CLASS=keyword>extern</font> ipaddress ipbcast;


<font CLASS=comment>//</font>
<font CLASS=comment>// IP peer info: host name, IP and the port name</font>
<font CLASS=comment>// used internally in ipstream and ipmessage</font>
<font CLASS=comment>//</font>


<font CLASS=keyword>class</font> ippeerinfo: public noncopyable
{
<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 
    // sockets are not compatible with file handles on Windows
    <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> large doseek(large newpos, ioseekmode mode);
    <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> doclose();
    <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> sockopt(<font CLASS=keytype>int</font> socket);
    <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=keyword>virtual</font> <font CLASS=keytype>void</font> sockopt(<font CLASS=keytype>int</font> socket);

<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=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=keyword>virtual</font> <font CLASS=keytype>void</font> sockopt(<font CLASS=keytype>int</font> socket);

<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>
Source at commit 209d6fa3805c created 11 years 7 months ago.
By Nathan Adams, Updating tparray to use variants as array because tpodlist was causing variant data corruption

Archive Download this file

Branches

Tags

Page rendered in 0.74123s using 11 queries.