samples/wantread/client.lua

changeset 0
f7d2d78eb424
equal deleted inserted replaced
-1:000000000000 0:f7d2d78eb424
1 --
2 -- Public domain
3 --
4 require("socket")
5 require("ssl")
6
7 local params = {
8 mode = "client",
9 protocol = "sslv3",
10 key = "../certs/clientAkey.pem",
11 certificate = "../certs/clientA.pem",
12 cafile = "../certs/rootA.pem",
13 verify = {"peer", "fail_if_no_peer_cert"},
14 options = {"all", "no_sslv2"},
15 }
16
17
18 local function wait(peer, err)
19 if err == "timeout" or err == "wantread" then
20 socket.select({peer}, nil)
21 elseif err == "wantwrite" then
22 socket.select(nil, {peer})
23 else
24 peer:close()
25 os.exit(1)
26 end
27 end
28
29
30 local peer = socket.tcp()
31 assert( peer:connect("127.0.0.1", 8888) )
32
33 -- [[ SSL wrapper
34 peer = assert( ssl.wrap(peer, params) )
35 peer:settimeout(0.3)
36 local succ, err = peer:dohandshake()
37 while not succ do
38 print("handshake", err)
39 wait(peer, err)
40 succ, err = peer:dohandshake()
41 end
42 print("** Handshake done")
43 --]]
44
45 -- If the section above is commented, the timeout is not set.
46 -- We set it again for safetiness.
47 peer:settimeout(0.3)
48
49 local str, err, part = peer:receive("*l")
50 while not str do
51 print(part, err)
52 wait(peer, err)
53 str, err, part = peer:receive("*l")
54 end
55 peer:close()

mercurial