tventi-server.3 - plan9port - [fork] Plan 9 from user space | |
git clone git://src.adamsgaard.dk/plan9port | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
tventi-server.3 (2203B) | |
--- | |
1 .TH VENTI-SERVER 3 | |
2 .SH NAME | |
3 vtsrvhello, vtlisten, vtgetreq, vtrespond \- Venti server | |
4 .SH SYNOPSIS | |
5 .PP | |
6 .ft L | |
7 #include <u.h> | |
8 .br | |
9 #include <libc.h> | |
10 .br | |
11 #include <venti.h> | |
12 .ta +\w'\fLVtReq* 'u | |
13 .PP | |
14 .ft L | |
15 .nf | |
16 typedef struct VtReq | |
17 { | |
18 VtFcall tx; | |
19 VtFcall rx; | |
20 ... | |
21 } VtReq; | |
22 .PP | |
23 .B | |
24 int vtsrvhello(VtConn *z) | |
25 .PP | |
26 .B | |
27 VtSrv* vtlisten(char *addr) | |
28 .PP | |
29 .B | |
30 VtReq* vtgetreq(VtSrv *srv) | |
31 .PP | |
32 .B | |
33 void vtrespond(VtReq *req) | |
34 .SH DESCRIPTION | |
35 These routines execute the server side of the | |
36 .MR venti (7) | |
37 protocol. | |
38 .PP | |
39 .I Vtsrvhello | |
40 executes the server side of the initial | |
41 .B hello | |
42 transaction. | |
43 It sets | |
44 .IB z -> uid | |
45 with the user name claimed by the other side. | |
46 Each new connection must be initialized by running | |
47 .I vtversion | |
48 and then | |
49 .IR vtsrvhello . | |
50 The framework below takes care of this detail automatically; | |
51 .I vtsrvhello | |
52 is provided for programs that do not use the functions below. | |
53 .PP | |
54 .IR Vtlisten , | |
55 .IR vtgetreq , | |
56 and | |
57 .I vtrespond | |
58 provide a simple framework for writing Venti servers. | |
59 .PP | |
60 .I Vtlisten | |
61 announces at the network address | |
62 .IR addr , | |
63 returning a fresh | |
64 .B VtSrv | |
65 structure representing the service. | |
66 .PP | |
67 .I Vtgetreq | |
68 waits for and returns | |
69 the next | |
70 .BR read , | |
71 .BR write , | |
72 .BR sync , | |
73 or | |
74 .B ping | |
75 request from any client connected to | |
76 the service | |
77 .IR srv . | |
78 .B Hello | |
79 and | |
80 .B goodbye | |
81 messages are handled internally and not returned to the client. | |
82 The interface does not distinguish between the | |
83 different clients that may be connected at any given time. | |
84 The request can be found in the | |
85 .I tx | |
86 field of the returned | |
87 .BR VtReq . | |
88 .PP | |
89 Once a request has been served and a response stored in | |
90 .IB r ->rx \fR, | |
91 the server should call | |
92 .IR vtrespond | |
93 to send the response to the client. | |
94 .I Vtrespond | |
95 frees the structure | |
96 .I r | |
97 as well as the packets | |
98 .IB r ->tx.data | |
99 and | |
100 .IB r ->rx.data \fR. | |
101 .SH EXAMPLE | |
102 .B \*9/src/venti/cmd | |
103 contains two simple Venti servers | |
104 .B ro.c | |
105 and | |
106 .B devnull.c | |
107 written using these routines. | |
108 .I Ro | |
109 is a read-only Venti proxy (it rejects | |
110 .B write | |
111 requests). | |
112 .I Devnull | |
113 is a dangerous write-only Venti server: it discards all | |
114 blocks written to it and returns error on all reads. | |
115 .SH SOURCE | |
116 .B \*9/src/libventi | |
117 .SH SEE ALSO | |
118 .MR venti (3) , | |
119 .MR venti-conn (3) , | |
120 .MR venti-packet (3) , | |
121 .MR venti (7) , | |
122 .MR venti (8) |