samples/wantread/client.lua

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()