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 8edbcdac0d39 created 11 years 8 months ago.
By Nathan Adams, initial commit

Archive Download this file

Branches

Tags

Page rendered in 0.74790s using 11 queries.