plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

venti-conn.3 (3704B)


      1 .TH VENTI-CONN 3
      2 .SH NAME
      3 VtConn, vtconn, vtdial, vtfreeconn, vtsend, vtrecv, vtversion,
      4 vtdebug, vthangup \- Venti network connections
      5 .SH SYNOPSIS
      6 .PP
      7 .ft L
      8 #include <u.h>
      9 .br
     10 #include <libc.h>
     11 .br
     12 #include <venti.h>
     13 .PP
     14 .ft L
     15 .nf
     16 .ta +\w'\fL    'u
     17 typedef struct VtConn {
     18 	int  debug;
     19 	char *version;
     20 	char *uid;
     21 	char *sid;
     22 	char addr[256];
     23 	...
     24 } VtConn;
     25 .PP
     26 .ta \w'\fLextern int 'u
     27 .B
     28 VtConn*	vtconn(int infd, int outfd)
     29 .PP
     30 .B
     31 int	vtreconn(VtConn *z, int infd, int outfd)
     32 .PP
     33 .B
     34 VtConn*	vtdial(char *addr)
     35 .PP
     36 .B
     37 int	vtredial(VtConn *z, char *addr)
     38 .PP
     39 .B
     40 int	vtversion(VtConn *z)
     41 .PP
     42 .B
     43 int	vtsend(VtConn *z, Packet *p)
     44 .PP
     45 .B
     46 Packet*	vtrecv(VtConn *z)
     47 .PP
     48 .B
     49 void	vtrecvproc(void *z)
     50 .PP
     51 .B
     52 void	vtsendproc(void *z)
     53 .PP
     54 .B
     55 void	vtdebug(VtConn *z, char *fmt, ...)
     56 .PP
     57 .B
     58 void	vthangup(VtConn *z)
     59 .PP
     60 .B
     61 void	vtfreeconn(VtConn *z)
     62 .PP
     63 .B
     64 extern int	chattyventi;	/* default 0 */
     65 .SH DESCRIPTION
     66 A
     67 .B VtConn
     68 structure represents a connection to a Venti server
     69 (when used by a client) or to a client (when used by a server).
     70 It contains the following user-visible fields:
     71 .BR debug ,
     72 a flag enabling debugging prints;
     73 .BR version ,
     74 the protocol version in use;
     75 .BR uid ,
     76 the (unverified) name of the client;
     77 .BR sid ,
     78 the (unverified) name of the server;
     79 and
     80 .BR addr ,
     81 the network address of the remote side.
     82 .PP
     83 .I Vtconn
     84 initializes a new connection structure using file descriptors
     85 .I infd
     86 and
     87 .I outfd
     88 (which may be the same)
     89 for reading and writing.
     90 .I Vtdial
     91 dials the given network address
     92 (see
     93 .MR dial (3) )
     94 and returns a corresponding connection.
     95 It returns nil if the connection cannot be established.
     96 .PP
     97 .I Vtversion
     98 exchanges version information with the remote side
     99 as described in
    100 .MR venti (7) .
    101 The negotiated version is stored in
    102 .IB z ->version \fR.
    103 .PP
    104 .I Vtsend
    105 writes a packet
    106 (see
    107 .MR venti-packet (3) )
    108 on the connection
    109 .IR z .
    110 The packet
    111 .IR p
    112 should be a formatted Venti message as might
    113 be returned by
    114 .IR vtfcallpack ;
    115 .I vtsend
    116 will add the two-byte length field
    117 (see
    118 .MR venti (7) )
    119 at the begnning.
    120 .I Vtsend
    121 frees
    122 .IR p ,
    123 even on error.
    124 .PP
    125 .I Vtrecv
    126 reads a packet from the connection
    127 .IR z .
    128 Analogous to
    129 .IR vtsend ,
    130 the data read from the connection must start with
    131 a two-byte length, but the returned packet will omit them.
    132 .PP
    133 By default, 
    134 .I vtsend
    135 and
    136 .I vtrecv
    137 block until the packet can be written or read from the network.
    138 In a threaded program
    139 (see
    140 .MR thread (3) ),
    141 this may not be desirable.
    142 If the caller arranges for
    143 .IR vtsendproc
    144 and
    145 .IR vtrecvproc
    146 to run in their own procs
    147 (typically by calling
    148 .IR proccreate ),
    149 then
    150 .I vtsend
    151 and
    152 .I vtrecv
    153 will yield the proc in which they are run
    154 to other threads when waiting on the network.
    155 The
    156 .B void*
    157 argument to
    158 .I vtsendproc
    159 and
    160 .I vtrecvproc
    161 must be the connection structure
    162 .IR z .
    163 .PP
    164 .I Vtdebug
    165 prints the formatted message to standard error
    166 when
    167 .IB z ->debug
    168 is set.  Otherwise it is a no-op.
    169 .PP
    170 .I Vthangup
    171 hangs up a connection.
    172 It closes the associated file descriptors
    173 and shuts down send and receive procs if they have been
    174 started.
    175 Future calls to
    176 .IR vtrecv
    177 or
    178 .IR vtsend
    179 will return errors.
    180 Additional calls to
    181 .I vthangup
    182 will have no effect.
    183 .PP
    184 .I Vtfreeconn
    185 frees the connection structure, hanging it up first
    186 if necessary.
    187 .PP
    188 If the global variable
    189 .I chattyventi
    190 is set, the library prints all Venti RPCs to standard error
    191 as they are sent or received.
    192 .SH SOURCE
    193 .B \*9/src/libventi
    194 .SH SEE ALSO
    195 .MR venti (1) ,
    196 .MR venti (3) ,
    197 .MR venti-client (3) ,
    198 .MR venti-packet (3) ,
    199 .MR venti-server (3) ,
    200 .MR venti (7)
    201 .SH DIAGNOSTICS
    202 Routines that return pointers return nil on error.
    203 Routines returning integers return 0 on success, \-1 on error.
    204 All routines set
    205 .I errstr
    206 on error.