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
|
local p = require('lib/utils').prettyPrint
local uv = require('luv')
local function create_server(host, port, on_connection)
local server = uv.new_tcp()
p(1, server)
uv.tcp_bind(server, host, port)
uv.listen(server, 128, function(err)
assert(not err, err)
local client = uv.new_tcp()
uv.accept(server, client)
on_connection(client)
end)
return server
end
local server = create_server("0.0.0.0", 0, function (client)
p("new client", client, uv.tcp_getsockname(client), uv.tcp_getpeername(client))
uv.read_start(client, function (err, chunk)
p("onread", {err=err,chunk=chunk})
-- Crash on errors
assert(not err, err)
if chunk then
-- Echo anything heard
uv.write(client, chunk)
else
-- When the stream ends, close the socket
uv.close(client)
end
end)
end)
local address = uv.tcp_getsockname(server)
p("server", server, address)
local client = uv.new_tcp()
uv.tcp_connect(client, "127.0.0.1", address.port, function (err)
assert(not err, err)
uv.read_start(client, function (err, chunk)
p("received at client", {err=err,chunk=chunk})
assert(not err, err)
if chunk then
uv.shutdown(client)
p("client done shutting down")
else
uv.close(client)
uv.close(server)
end
end)
p("writing from client")
uv.write(client, "Hello")
uv.write(client, "World")
end)
-- Start the main event loop
uv.run()
-- Close any stray handles when done
uv.walk(uv.close)
uv.run()
|