diff options
author | N.N. <matju@users.sourceforge.net> | 2008-04-28 18:10:15 +0000 |
---|---|---|
committer | N.N. <matju@users.sourceforge.net> | 2008-04-28 18:10:15 +0000 |
commit | 91c0003b158e5f0ed9d0677fb136ae8bb6f86ec5 (patch) | |
tree | d413a48086819f6a2620cd27d030861d122d4f3f /externals/gridflow/extra/server_2.rb | |
parent | 98dfdfa2fc1c92ba69e33fd77ed3392034297c1f (diff) |
this is an old gridflow, and there's already a svn repository at http://gridflow.ca/svn/trunk
svn path=/trunk/; revision=9739
Diffstat (limited to 'externals/gridflow/extra/server_2.rb')
-rw-r--r-- | externals/gridflow/extra/server_2.rb | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/externals/gridflow/extra/server_2.rb b/externals/gridflow/extra/server_2.rb deleted file mode 100644 index 4807d502..00000000 --- a/externals/gridflow/extra/server_2.rb +++ /dev/null @@ -1,65 +0,0 @@ -# a server program to connect 2 or more clients together. -# by Mathieu Bouchard - -require "fcntl" -require "socket" - -class IO - def nonblock=flag - bit = Fcntl::O_NONBLOCK - fcntl(Fcntl::F_SETFL, (fcntl(Fcntl::F_GETFL) & ~bit) | - if flag then bit else 0 end) - end - # does not work with any ruby version, due to a bug. see below. - def read_at_most n - s="" - k=1<<(Math.log(n)/Math.log(2)).to_i - while k>0 - unless k+s.length>n - puts "trying #{k}" - (s << read(k)) rescue Errno::EWOULDBLOCK - end - k>>=1 - end - s - end - # this one works but is slow. - def bugfree_read_at_most n - s="" - (s << (read 1) while s.length<n) rescue Errno::EWOULDBLOCK - s - end -end - -serv = TCPServer.new 4242 -socks = [serv] - -loop { - puts "waiting for connection (port 4242)" - begin - loop { - puts "waiting" - ready,blah,crap = IO.select socks, [], socks, 1 - (ready||[]).each {|s| - if s==serv then - sock = serv.accept - sock.nonblock=true - socks << sock - puts "incoming connection (total: #{socks.length-1})" - else - other = socks.find_all{|x|not TCPServer===x} - [s] - stuff = s.bugfree_read_at_most 1024 - p stuff - (s.close; socks.delete s) if not stuff or stuff.length==0 - other.each {|x| - p x - x.write stuff - } - end - } - } - rescue Errno::EPIPE # Broken Pipe - puts "connection closed (by client)" - # it's ok, go back to waiting. - end -} |