1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
-- See LICENSE file for copyright and license details.
l = require "luxio"
local req = "GET / HTTP/1.1\r\nHost: www.rjek.com\r\nConnection: close\r\n\r\n"
local r, errno
r, addrinfo = l.getaddrinfo("www.rjek.com", "80", 0, l.AF_UNSPEC, l.SOCK_STREAM)
if (r < 0) then
io.stdout:write(("FAIL: getaddrinfo: %s\n"):format(l.gai_strerror(r)))
os.exit(false)
end
local sock
for idx, ai in ipairs(addrinfo) do
io.stdout:write(("STAT: trying suggestion %d...\n"):format(idx))
for i, v in pairs(ai) do
io.stdout:write(("STAT: '%s' is '%s'\n"):format(tostring(i), tostring(v)))
end
sock, errno = l.socket(ai.ai_family, ai.ai_socktype, ai.ai_protocol)
if (sock < 0) then
io.stdout:write(("STAT: can't create socket: %s\n"):format(l.strerror(errno)))
sock = nil
else
r, errno = l.connect(sock, ai.ai_addr);
if (r < 0) then
io.stdout:write(("STAT: can't connect: %s\n"):format(l.strerror(errno)))
r, errno = l.close(sock)
if (r < 0) then
io.stdout:write(("FAIL: close: %s\n"):format(l.strerror(errno)))
os.exit(false)
end
sock = nil
else
break -- we connected!
end
end
end
if (sock == nil) then
io.stdout:write("FAIL: unable to find anything to connect to!\n")
os.exit(false)
end
local sent = 0
while sent < #req do
r, errno = l.write(sock, req, sent)
if (r < 0) then
io.stdout:write(("FAIL: write: %s\n"):format(l.strerror(errno)))
os.exit(false);
end
sent = sent + r
io.stdout:write(("STAT: wrote %d of %d bytes, %d total sent\n"):format(r, #req, sent))
end
repeat
r, errno = l.read(sock, 1024)
if (r == -1) then
io.stdout:write(("FAIL: read: %s\n"):format(l.strerror(errno)))
os.exit(false)
end
io.stdout:write(r)
until #r == 0
io.stdout:write("PASS: Well, possibly.\n")
|