Skip to content

Instantly share code, notes, and snippets.

@benlangfeld
Created November 18, 2012 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save benlangfeld/5e27487921402d602db1 to your computer and use it in GitHub Desktop.
Save benlangfeld/5e27487921402d602db1 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
$:.push File.expand_path('../../lib', __FILE__)
require 'celluloid/io'
class Server
include Celluloid::IO
def initialize(host, port)
puts "*** Starting server on #{host}:#{port}"
@server = TCPServer.new(host, port)
run!
end
def finalize
puts "Server closing"
@server.close if @server
end
def run
loop { handle_connection! @server.accept }
end
def handle_connection(socket)
_, port, host = socket.peeraddr
puts "*** Received connection from #{host}:#{port}"
loop { puts socket.readpartial(4096) }
rescue EOFError
puts "*** #{host}:#{port} disconnected"
socket.close
end
end
class Client
include Celluloid::IO
def initialize(host, port)
puts "*** Connecting to echo server on #{host}:#{port}"
@socket = TCPSocket.new(host, port)
run!
end
def shutdown
@socket.close if @socket
end
def run
loop { puts @socket.readpartial 4096 }
rescue EOFError => e
puts "Client socket closed due to #{e.message}!"
terminate
end
end
server = Server.new("127.0.0.1", 1234)
client = Client.new("127.0.0.1", 1234)
client.shutdown
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment