Blame examples/socket.lua

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)