mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 3a47cf3395
			
		
	
	
		3a47cf3395
		
	
	
	
	
		
			
			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
 |