glenda.party
term% ls -F
term% cat index.txt
VENTI-CONN(2)                 System Calls Manual                VENTI-CONN(2)



NAME
       VtConn, vtconn, vtdial, vtfreeconn, vtsend, vtrecv, vtversion, vtdebug,
       vthangup - Venti network connections

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

       typedef struct VtConn {
           int  debug;
           char *version;
           char *uid;
           char *sid;
           char addr[256];
           ...
       } VtConn;

       VtConn*    vtconn(int infd, int outfd)

       VtConn*    vtdial(char *addr)

       int        vtversion(VtConn *z)

       int        vtsend(VtConn *z, Packet *p)

       Packet*    vtrecv(VtConn *z)

       void       vtrecvproc(void *z)

       void       vtsendproc(void *z)

       void       vtdebug(VtConn *z, char *fmt, ...)

       void       vthangup(VtConn *z)

       void       vtfreeconn(VtConn *z)

       extern int chattyventi;/* default 0 */

DESCRIPTION
       A VtConn structure represents a connection to a Venti server (when used
       by  a  client) or to a client (when used by a server).  It contains the
       following user-visible fields: debug, a flag enabling debugging prints;
       version, the protocol version in use; uid, the (unverified) name of the
       client; sid, the (unverified) name of the server; and addr, the network
       address of the remote side.

       Vtconn  initializes  a  new connection structure using file descriptors
       infd and outfd (which may be the same) for reading and writing.  Vtdial
       dials the given network address (see dial(2)) and returns a correspond‐
       ing connection.  It returns nil if  the  connection  cannot  be  estab‐
       lished.

       Vtversion  exchanges  version  information  with the remote side as de‐
       scribed in venti(6).  The negotiated version is stored in z->version.

       Vtsend writes a packet (see venti-packet(2)) on the connection z.   The
       packet  p  should  be a formatted Venti message as might be returned by
       vtfcallpack; vtsend will add the two-byte length field  (see  venti(6))
       at the begnning.  Vtsend frees p, even on error.

       Vtrecv  reads a packet from the connection z.  Analogous to vtsend, the
       data read from the connection must start with a  two-byte  length,  but
       the returned packet will omit them.

       By  default, vtsend and vtrecv block until the packet can be written or
       read from the network.  In a threaded program (see thread(2)), this may
       not be desirable.  If the caller arranges for vtsendproc and vtrecvproc
       to run in their own procs (typically by calling proccreate),  then  vt‐
       send  and  vtrecv  will  yield  the proc in which they are run to other
       threads when waiting on the network.  The void* argument to  vtsendproc
       and vtrecvproc must be the connection structure z.

       Vtdebug prints the formatted message to standard error when z->debug is
       set.  Otherwise it is a no-op.

       Vthangup hangs up a connection.  It closes the associated file descrip‐
       tors  and  shuts down send and receive procs if they have been started.
       Future calls to vtrecv or vtsend will return errors.  Additional  calls
       to vthangup will have no effect.

       Vtfreeconn  frees the connection structure, hanging it up first if nec‐
       essary.

       If the global variable chattyventi is set, the library prints all Venti
       RPCs to standard error as they are sent or received.

SOURCE
       /sys/src/libventi

SEE ALSO
       venti(1),  venti(2), venti-client(2), venti-packet(2), venti-server(2),
       venti(6)

DIAGNOSTICS
       Routines that return pointers return nil on error.  Routines  returning
       integers  return 0 on success, -1 on error.  All routines set errstr on
       error.



                                                                 VENTI-CONN(2)