From: Oliver Peng Date: 2009-09-16T06:11:00+09:00 Subject: Socket hang in thread Design a thread and in the thread start a new TCPServer and get income string. Start irb in Windows cmd: irb(main):001:0> require 'socket' => true irb(main):002:0> irb(main):003:0* class TestServe < Thread irb(main):004:1> irb(main):005:1* def initialize(host, port) irb(main):006:2> irb(main):007:2* @tcpServer = TCPServer.new(host, port) irb(main):008:2> @tcpServer.listen(25) irb(main):009:2> irb(main):010:2* super { irb(main):011:3* begin irb(main):012:4* if tcp = @tcpServer.accept irb(main):013:5> irb(main):014:5* while line = tcp.gets() irb(main):015:6> puts line irb(main):016:6> tcp.write(line) irb(main):017:6> end irb(main):018:5> end irb(main):019:4> rescue SignalException, StandardError => e irb(main):020:4> puts("%s exception %s:\n%s" % [self.class, e.inspect , e.backtrace.join("\n")]) irb(main):021:4> end irb(main):022:3> } irb(main):023:2> end irb(main):024:1> end => nil irb(main):025:0> irb(main):026:0* irb(main):027:0* server = TestServe.new('127.0.0.1', 12345) => # irb(main):028:0> I open another Windows cmd window and try to use telnet to connect to same address and port. The problem is all chars I input in telnet doesn't show in irb until I go back to irb window and hit return button. So it looks that in thread the server socket was blocked. I also tried to start irb and run same code in the Cygwin cmd enviroment. Once I input anything in telnet, I can see it in irb. Any suggestions? Thanks. -- Posted via http://www.ruby-forum.com/.