|
Packit |
437b5e |
local sig = require "posix.signal"
|
|
Packit |
437b5e |
local sock = require "posix.sys.socket"
|
|
Packit |
437b5e |
local unistd = require "posix.unistd"
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
sig.signal (sig.SIGPIPE, function () print "pipe" end)
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
-- Get Lua web site title
|
|
Packit |
437b5e |
local r, err = sock.getaddrinfo ("www.lua.org", "http", { family = sock.AF_INET, socktype = sock.SOCK_STREAM })
|
|
Packit |
437b5e |
if not r then error (err) end
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
local fd = sock.socket (sock.AF_INET, sock.SOCK_STREAM, 0)
|
|
Packit |
437b5e |
local ok, err, e = sock.connect (fd, r[1])
|
|
Packit |
437b5e |
local sa = sock.getsockname(fd)
|
|
Packit |
437b5e |
print("Local socket bound to " .. sa.addr .. ":" .. tostring(sa.port))
|
|
Packit |
437b5e |
if err then error (err) end
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
sock.send (fd, "GET / HTTP/1.0\r\nHost: www.lua.org\r\n\r\n")
|
|
Packit |
437b5e |
local data = {}
|
|
Packit |
437b5e |
while true do
|
|
Packit |
437b5e |
local b = sock.recv (fd, 1024)
|
|
Packit |
437b5e |
if not b or #b == 0 then
|
|
Packit |
437b5e |
break
|
|
Packit |
437b5e |
end
|
|
Packit |
437b5e |
table.insert (data, b)
|
|
Packit |
437b5e |
end
|
|
Packit |
437b5e |
unistd.close (fd)
|
|
Packit |
437b5e |
data = table.concat (data)
|
|
Packit |
437b5e |
print (data:match "<TITLE>(.+)</TITLE>")
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
-- Loopback UDP test, IPV4 and IPV6
|
|
Packit |
437b5e |
local fd = sock.socket (sock.AF_INET6, sock.SOCK_DGRAM, 0)
|
|
Packit |
437b5e |
sock.bind (fd, { family = sock.AF_INET6, addr = "::", port = 9999 })
|
|
Packit |
437b5e |
sock.sendto (fd, "Test ipv4", { family = sock.AF_INET, addr = "127.0.0.1", port = 9999 })
|
|
Packit |
437b5e |
sock.sendto (fd, "Test ipv6", { family = sock.AF_INET6, addr = "::", port = 9999 })
|
|
Packit |
437b5e |
for i = 1, 2 do
|
|
Packit |
437b5e |
local ok, r = sock.recvfrom (fd, 1024)
|
|
Packit |
437b5e |
if ok then
|
|
Packit |
437b5e |
print (ok, r.addr, r.port)
|
|
Packit |
437b5e |
else
|
|
Packit |
437b5e |
print (ok, r)
|
|
Packit |
437b5e |
end
|
|
Packit |
437b5e |
end
|
|
Packit |
437b5e |
unistd.close (fd)
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
os.exit (0)
|