r18455 reverted.
[ruby-svn.git] / sample / svr.rb
blob11cfc5fbfe5a0fba61cd8029168ad67a259e5f6f
1 # socket example - server side
2 # usage: ruby svr.rb
4 # this server might be blocked by an ill-behaved client.
5 # see tsvr.rb which is safe from client blocking.
7 require "socket"
9 gs = TCPserver.open(0)
10 addr = gs.addr
11 addr.shift
12 printf("server is on %s\n", addr.join(":"))
13 socks = [gs]
15 loop do
16   nsock = select(socks);
17   next if nsock == nil
18   for s in nsock[0]
19     if s == gs
20       ns = s.accept
21       socks.push(ns)
22       print(s, " is accepted\n")
23     else
24       if s.eof?
25         print(s, " is gone\n")
26         s.close
27         socks.delete(s)
28       # single thread gets may block whole service
29       elsif str = s.gets   
30           s.write(str)
31       end
32     end
33   end
34 end