VENTI-SERVER(2)                                   VENTI-SERVER(2)

     NAME
          vtsrvhello, vtlisten, vtgetreq, vtrespond - Venti server

     SYNOPSIS
          #include <u.h>
          #include <libc.h>
          #include <venti.h>

          typedef struct VtReq
          {
                 VtFcall tx;
                 VtFcall rx;
                 ...
          } VtReq;

          int    vtsrvhello(VtConn *z)

          VtSrv* vtlisten(char *addr)

          VtReq* vtgetreq(VtSrv *srv)

          void   vtrespond(VtReq *req)

     DESCRIPTION
          These routines execute the server side of the venti(6) pro-
          tocol.

          Vtsrvhello executes the server side of the initial hello
          transaction.  It sets z->uid with the user name claimed by
          the other side.  Each new connection must be initialized by
          running vtversion and then vtsrvhello. The framework below
          takes care of this detail automatically; vtsrvhello is pro-
          vided for programs that do not use the functions below.

          Vtlisten, vtgetreq, and vtrespond provide a simple framework
          for writing Venti servers.

          Vtlisten announces at the network address addr, returning a
          fresh VtSrv structure representing the service.

          Vtgetreq waits for and returns the next read, write, sync,
          or ping request from any client connected to the service
          srv. Hello and goodbye messages are handled internally and
          not returned to the client.  The interface does not distin-
          guish between the different clients that may be connected at
          any given time.  The request can be found in the tx field of
          the returned VtReq.

          Once a request has been served and a response stored in
          r->rx, the server should call vtrespond to send the response

     VENTI-SERVER(2)                                   VENTI-SERVER(2)

          to the client.  Vtrespond frees the structure r as well as
          the packets r->tx.data and r->rx.data.

     EXAMPLE
          /sys/src/cmd/venti contains two simple Venti servers ro.c
          and devnull.c written using these routines.  Ro is a read-
          only Venti proxy (it rejects write requests).  Devnull is a
          dangerous write-only Venti server: it discards all blocks
          written to it and returns error on all reads.

     SOURCE
          /sys/src/libventi

     SEE ALSO
          venti(2), venti-conn(2), venti-packet(2), venti(6), venti(8)