summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/luv/examples/echo-server-client.lua
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/luv/examples/echo-server-client.lua')
-rw-r--r--3rdparty/luv/examples/echo-server-client.lua68
1 files changed, 68 insertions, 0 deletions
diff --git a/3rdparty/luv/examples/echo-server-client.lua b/3rdparty/luv/examples/echo-server-client.lua
new file mode 100644
index 00000000000..ea4e6d2132d
--- /dev/null
+++ b/3rdparty/luv/examples/echo-server-client.lua
@@ -0,0 +1,68 @@
+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()
+uv.loop_close()