#!/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))