Skip to content

Instantly share code, notes, and snippets.

@prem
Forked from dyoder/sockets.rb
Created August 28, 2008 00:52
Show Gist options
  • Save prem/7623 to your computer and use it in GitHub Desktop.
Save prem/7623 to your computer and use it in GitHub Desktop.
require 'socket'
require 'rubygems'
require 'monitor'
include Socket::Constants
def readthread(s, buf, conn, lock)
while (data = s.gets)
if(data.chomp != 'END')
puts ">>>> before lock #{conn}"
puts ">>>> Read #{data}"
# lock.syncronize do
puts ">>>> Got lock for #{conn}"
buf.replace data
# end
puts ">>>> after lock #{conn}"
s.write(buf)
else
w.close
break
end
end
puts s, " connection closed\n"
s.close
end
def writethread(buf, conn, lock)
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in( 2202, '10.45.10.219' )
socket.connect( sockaddr )
5.times do
puts "<<<< before lock #{conn}"
lock.syncronize do
puts "<<<< Got lock for #{conn}"
socket.puts "#{buf}"
puts "<<<< Sent : #{buf}"
end
puts "<<<< after lock #{conn}"
end
socket.puts "END"
socket.close
end
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in( 2201, '10.45.10.219' )
socket.bind( sockaddr )
socket.listen( 5 )
puts "Listening on 2201"
conn = 0
while true
buf = Array.new(1024)
conn = conn + 1
lock = Monitor.new
client, client_sockaddr = socket.accept
puts "Got connection from #{client.inspect}. Starting thread"
Thread.start(client) do |s|
readthread(s, buf, conn, lock)
end
Thread.start do
writethread(buf, conn, lock)
end
end
socket.close
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment