local socket = require "socket" local posix = require "posix" local M, reply_size, request_size = 100, 4096, 64 local N = tonumber(arg and arg[1]) or 1 local function client(sk) local repsize = reply_size local request = string.rep(" ", request_size) local replies = 0 for i=1,N*M do sk:send(request) sk:receive(repsize) replies = replies + 1 end io.write("replies: ", replies, "\tbytes: ", sk:getstats(), "\n") io.flush() sk:close() end local function server(sk) local reqsize = request_size local reply = string.rep(" ", reply_size) for i=1,N*M do sk:receive(reqsize) sk:send(reply) end sk:close() end local ls = socket.bind("127.0.0.1", 0) if posix.fork() == 0 then -- Child is client client(socket.connect(ls:getsockname())) os.exit() else -- Parent is server server(ls:accept()) ls:close() posix.wait() end