#!/usr/local/bin/ruby # -*- mode: ruby -*- # $Id: echo.ruby,v 1.3 2001/05/08 08:08:41 doug Exp $ # http://www.bagley.org/~doug/shootout/ require "socket" DATA = "Hello there sailor\n" def echo_client(n, port) sock = TCPsocket.open('127.0.0.1', port) n.times do sock.write(DATA) ans = sock.readline if ans != DATA then raise sprintf("client: \"%s\" \"%s\"", DATA, ans) end end sock.close end def echo_server(n) ssock = TCPserver.open('127.0.0.1', 0) port = ssock.addr[1] if pid = fork then # parent is server csock = ssock.accept n = 0 while str = csock.gets n += csock.write(str) end Process.wait printf "server processed %d bytes\n", n else # child is client echo_client(n, port) end end echo_server(Integer(ARGV.shift || 1))