#! /usr/bin/env ruby require 'socket' PORT = 5001 HOST = '::1' SOCKPATH = '/tmp/ahoy/socket' def handle_client client UNIXSocket.open(SOCKPATH) do |conn| while !client.closed? && !conn.closed? readies = select [client,conn] readies[0].each do |ready| case ready when conn msg = conn.recv 0x10000 if msg.length == 0 client.close conn.close break end client.print msg when client msg = client.recv 0x10000 if msg.length == 0 conn.close client.close break end conn.print msg else $stderr.puts "Can't happen!" end end end end end TCPServer.open(HOST, PORT) do |server| while true client = server.accept fork { handle_client client } client.close end end