mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			34 lines
		
	
	
	
		
			646 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
	
		
			646 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# socket example - server side
 | 
						|
# usage: ruby svr.rb
 | 
						|
 | 
						|
# this server might be blocked by an ill-behaved client.
 | 
						|
# see tsvr.rb which is safe from client blocking.
 | 
						|
 | 
						|
require "socket"
 | 
						|
 | 
						|
gs = TCPServer.open(0)
 | 
						|
addr = gs.addr
 | 
						|
addr.shift
 | 
						|
printf("server is on %s\n", addr.join(":"))
 | 
						|
socks = [gs]
 | 
						|
 | 
						|
loop do
 | 
						|
  nsock = select(socks);
 | 
						|
  next if nsock == nil
 | 
						|
  for s in nsock[0]
 | 
						|
    if s == gs
 | 
						|
      ns = s.accept
 | 
						|
      socks.push(ns)
 | 
						|
      print(s, " is accepted\n")
 | 
						|
    else
 | 
						|
      if s.eof?
 | 
						|
	print(s, " is gone\n")
 | 
						|
	s.close
 | 
						|
	socks.delete(s)
 | 
						|
      # single thread gets may block whole service
 | 
						|
      elsif str = s.gets
 | 
						|
	  s.write(str)
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |