Guest User

Untitled

a guest
Jun 18th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. require 'socket'
  2.  
  3. class ClientQuitError < RuntimeError; end
  4.  
  5. port = ARGV.shift || 0 # default is to use the next available port
  6. host = ARGV.shift # default is to bind everything
  7.  
  8. server = host ? TCPServer.open(host, port) : TCPServer.open(port)
  9.  
  10. port = server.addr[1]
  11. addrs = server.addr[2..-1].uniq
  12.  
  13. puts "*** listening on #{addrs.collect{|a|"#{a}:#{port}"}.join(' ')}"
  14.  
  15. loop do
  16. socket = server.accept
  17.  
  18. Thread.start do # one thread per client
  19. s = socket
  20.  
  21. port = s.peeraddr[1]
  22. name = s.peeraddr[2]
  23. addr = s.peeraddr[3]
  24.  
  25. puts "*** recieving from #{name}:#{port}"
  26.  
  27. begin
  28. while line = s.gets # read a line at a time
  29. raise ClientQuitError if line =~ /^die\r?$/
  30. puts "#{addr} [#{Time.now}]: #{line}"
  31. end
  32.  
  33. rescue ClientQuitError
  34. puts "*** #{name}:#{port} disconnected"
  35.  
  36. ensure
  37. s.close # close socket on error
  38. end
  39.  
  40. puts "*** done with #{name}:#{port}"
  41. end
  42.  
  43. end
Add Comment
Please, Sign In to add comment