ptypes

ptypes Mercurial Source Tree


Root/doc/inet.ipmsgserver.html

<html><!-- #BeginTemplate "/Templates/tmpl.dwt" --><!-- DW6 -->
<head>
<!-- #BeginEditable "doctitle" --> 
<title>PTypes: networking: ipstmserver</title>
<!-- #EndEditable --> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="styles.css">
</head>
<body bgcolor="#FFFFFF" leftmargin="40" marginwidth="40">
<p><a href="../index.html"><img src="title-21.png" width="253" height="39" alt="C++ Portable Types Library (PTypes) Version 2.1" border="0"></a> 
<hr size="1" noshade>
<!-- #BeginEditable "body" --> 
<p class="hpath"><a href="index.html">Top</a>: <a href="inet.html">Networking</a>: 
ipmsgserver</p>
<blockquote> 
<pre class="lang">#include <pinet.h>

class ipmsgserver {
    ipmsgserver();

    int bind(ipaddress ip, int port);
    int bindall(int port);

    bool   poll(int bindnum = -1, int timeout = 0);
    int    receive(char* buf, int count);
    string receive(int max);
    void   send(const char* buf, int count);
    void   send(string s);
    void   sendto(const char* buf, int count, ipaddress ip, int port);
    void   sendto(string s, ipaddress ip, int port)

    ipaddress get_ip();
    string    get_host();

    virtual void sockopt(int socket);
}
</pre>
</blockquote>
<p>The <span class="lang">ipmsgserver</span> class is used on the server side 
of a client-server application. It bounds itself to a specified port/address and 
waits until a packet is received from a client host. Once a packet is read with 
<span class="lang">receive()</span>, subsequent calls to <span class="lang">send()</span> 
will post data back to the client that sent the last request. Each request must 
be fulfilled immediately; unlike the stream-oriented server class, <span class="lang">ipmsgserver</span> 
can not handle requests concurrently.</p>
<p><span class="lang">ipmsgserver</span> can generate exceptions of type <span class="lang">(estream*)</span> 
with a corresponding error code and a message string.</p>
<p>Please, see also the introduction to <a href="inet.ipmessage.html">ipmessage</a>.</p>
<p><span class="def">ipmsgserver::ipmsgserver()</span> constructs an <span class="lang">ipmsgserver</span> 
object.</p>
<p><span class="def">int ipmsgserver::bind(ipaddress ip, int port)</span> binds 
the server to the specified local IP address and port number. This function can 
be called multiple times for different local addresses and port numbers. <span class="lang">Bind()</span> 
returns a value that can be used later in call to <span class="lang">poll()</span> 
as the parameter <span class="lang">bindnum</span>.</p>
<p><span class="def">int ipmsgserver::bindall(int port)</span> binds the server 
to all local IP addresses on the specified port number. Can be called multiple 
times for different port numbers. <span class="lang">Bindall()</span> returns 
a value that can be used later in call to <span class="lang">poll()</span> as 
the parameter <span class="lang">bindnum</span>.</p>
<p><span class="def">bool ipmsgserver::poll(int bindnum = -1, int timeout = 0)</span> 
polls the listening sockets for data available for reading. <span class="lang">Bindnum</span> 
specifies the socket number reutrned by <span class="lang">bind()</span> or <span class="lang">bindall()</span>. 
If this parameter is -1 <span class="lang">poll()</span> tests all sockets. The 
second parameter <span class="lang">timeout</span> specifies the amount of time 
in milliseconds to wait for data. If <span class="lang">timeout</span> is 0 <span class="lang">poll()</span> 
returns immediately; if it's -1 <span class="lang">poll()</span> waits infinitely. 
This function returns <span class="lang">true</span> if there is data available 
for reading.</p>
<p><span class="def">int ipmsgserver::receive(char* buf, int count)</span> reads 
data from the socket. <span class="lang">Receive()</span> may hang if no data 
is available for reading. This function returns the actual number of bytes read. 
If the packet received exceeds the size of the supplied buffer, an exception is 
raised with code EMSGSIZE. You may check if there is data available for reading 
without 'hanging' using <span class="lang">poll()</span> described above.</p>
<p><span class="def">string ipmsgserver::receive(int max)</span> works like the 
previous version of <span class="lang">receive()</span> except that it returns 
data in a dynamic string. The parameter <span class="lang">max</span> specifies 
the limit which may not be exceeded when reading data from the network, like with 
the previous version of <span class="lang">receive()</span>.</p>
<p><span class="def">void ipmsgserver::send(const char* buf, int count)</span> 
sends data to the peer. The destination address is determined from the last packet 
read using <span class="lang">receive()</span>.</p>
<p><span class="def">void ipmsgserver::send(string s)</span> works like the previous 
version of <span class="lang">send()</span> except that it sends the string <span class="lang">s</span> 
(not including the terminating null-symbol).</p>
<p><span class="def">void ipmsgserver::sendto(const char* buf, int count, ipaddress ip, int port)</span> 
sends data to the specified address and port.</p>
<p><span class="def">void ipmsgserver::sendto(string s, ipaddress ip, int port)</span> works like the previous 
version of <span class="lang">send()</span> except that it sends the string <span class="lang">s</span> 
(not including the terminating null-symbol).</p>
<p><span class="def">ipaddress ipmsgserver::get_ip()</span> returns the IP address 
of the peer. The information about the peer is determined during a successful 
call to <span class="lang">receive()</span>.</p>
<p><span class="def">string ipmsgserver::get_host()</span> returns the peer host 
name. A reverse DNS lookup may be performed if necessary. The information about 
the peer is determined during a successful call to <span class="lang">receive()</span>.</p>
<p><span class="def">virtual void ipmsgserver::sockopt(int socket)</span> - override this method in a descendant class if you want to set up additional socket options (normally, by calling <span class="lang">setsockopt()</span>).</p>
<p class="seealso">See also: <a href="inet.ipmessage.html">ipmessage</a>, <a href="inet.utils.html">Utilities</a>, 
<a href="inet.examples.html">Examples</a></p>
<!-- #EndEditable -->
<hr size="1">
<a href="../index.html" class="ns">PTypes home</a>
</body>
<!-- #EndTemplate --></html>
Source at commit tip created 11 years 7 months ago.
By Nathan Adams, Updating makefile

Archive Download this file

Branches

Tags

Page rendered in 0.73956s using 11 queries.