rpcbuf  -  streambuf specialized for sending and receiving
       RPC requests


SYNOPSIS

       #include <Dispatch/rpcbuf.h>


DESCRIPTION

       An rpcbuf is a streambuf specialized in two ways:  to  use
       an IPC connection as a source or sink of characters and to
       send and receive RPC requests.  The  rpcbuf  encloses  RPC
       requests  in  packets  which  begin with a length field so
       that the rpcbuf can buffer requests until  they  are  com-
       plete if the user uses non-blocking I/O.


CONSTRUCTORS

       rpcbuf(iostreamb* = nil)
              Construct  an  unopened rpcbuf, giving it a pointer
              to an iostreamb so that the  rpcbuf  can  read  and
              write the length field of RPC requests.


IPC OPERATIONS

       const char* host()
       int port()
       int fd()
       boolean opened()
       boolean nonblocking()
              Return information about the IPC connection.

       enum { anyport = 0 }
       rpcbuf* listen(int port)
              Create  a  socket, bind the socket to a <localhost,
              port> address, and prepare to accept incoming  con-
              nections.   anyport  can be used in place of a spe-
              cific port number.  Return the rpcbuf's address  if
              successful, nil otherwise.

       rpcbuf* connect(const char* host, int port)
              Create  a  socket  and  connect it to a peer at the
              <host, port> address.  Return the rpcbuf's  address
              if successful, nil otherwise.

       rpcbuf* accept(int& fd)
              Accept  an incoming connection, allocate a new file
              descriptor for it, and assign the new file descrip-
              tor  to the parameter.  Return the rpcbuf's address
              if successful, nil otherwise.  Can be  called  only
              for rpcbufs that have already called listen.

       rpcbuf* attach(int fd)
              Attach the rpcbuf to a file descriptor.  The rpcbuf
              will not be allowed to close the file descriptor.

              Enable or disable  non-blocking  I/O  on  the  file
              descriptor (disabled by default).

       rpcbuf* verbose(boolean)
              Enable  or  disable printing of error messages when
              anything goes wrong (enabled by default).

       rpcbuf* close()
              Flush  the  get  and  put  areas,  close  the  file
              descriptor  if  it  was  created by the rpcbuf, and
              detach the rpcbuf from the file descriptor.


RPC OPERATIONS

       int start_request()
              If a current request exists, compute its length and
              insert  the length into the request's length field.
              Then start a new  request,  making  sure  to  leave
              space  for the request's length field.  Return 0 if
              no problem occurred, EOF otherwise.

       int read_request()
              Return 0 if a complete request is buffered  in  the
              get  area, EOF otherwise.  The rpcbuf moves the get
              pointer back to the beginning of the request  after
              extracting  the  length field and checking that the
              get area contains that many bytes.


STREAMBUF OPERATIONS

       virtual int overflow(int c=EOF)
              If given EOF, terminate the current request.  Flush
              all  requests  buffered  in the put area except for
              the last request if it's still  incomplete.   Shift
              any  still  incomplete  request to the beginning of
              the put area.  If given a character, append  it  to
              the request.

       virtual int underflow()
              Flush  the  put  area.   Shift  any still unread or
              incomplete requests to the  beginning  of  the  get
              area  and position the get pointer at the beginning
              of the get area.  Read as much data as available to
              fill  the  rest  of  the  get area.  Return the get
              area's  first  character  or  EOF  if   a   problem
              occurred.

       virtual int sync()
              Discard  any  still  unread  requests  from the get
              area.  Flush all buffered  requests  from  the  put
              area.

       virtual streampos seekoff(streamoff, ios::seek_dir, int)
              Allow  the  user  to find the get pointer's current
              EOF if the user tries to do anything else than find
              the get pointer's current position.

       virtual streambuf* setbuf(char*, int)
              Reject  any attempt to set the buffer used to store
              incoming and outgoing requests.  The rpcbuf dynami-
              cally allocates separate buffers for both areas and
              automatically resizes the buffers  whenever  neces-
              sary.


SEE ALSO

       IOS.INTRO(3C++), rpcstream(3I)









































Man(1) output converted with man2html