|  | 
 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 {
 
 } VtConn;|  |  |  | int    debug; char *version;
 char *uid;
 char *sid;
 char addr[256];
 ...
 
 | 
 VtConn*     vtconn(int infd, int outfd)
 int        vtreconn(VtConn *z, int infd, int outfd)
 VtConn*     vtdial(char *addr)
 int        vtredial(VtConn *z, 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(3)) and returns
    a corresponding connection. It returns nil if the connection cannot
    be established. 
    
    
    Vtversion exchanges version information with the remote side as
    described in venti(7). The negotiated version is stored in z−>version.
    
    
    
    Vtsend writes a packet (see venti-packet(3)) 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(7)) 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(3)),
    this may not be desirable. If the caller arranges for vtsendproc
    and vtrecvproc to run in their own procs (typically by calling
    proccreate), then vtsend 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
    descriptors 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 necessary. 
    
    
    If the global variable chattyventi is set, the library prints
    all Venti RPCs to standard error as they are sent or received. 
 | 
 SOURCE     
 SEE ALSO    
 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. 
 | 
 |  |