From: Tim Shadel Date: 2005-07-24T02:58:16+09:00 Subject: Gem hangs => TCPSocket.write hangs Well, I tried deleting the cache and that didn't work. So I dug in and tried to find the call that was hanging. I eventually traced it down to the TCPSocket.write call inside the HTTP module. Here's a snippet from irb that shows the problem: C:\>irb irb(main):001:0> require 'socket' => true irb(main):002:0> sock = TCPSocket.new("gems.rubyforge.org", 80) => # irb(main):003:0> sock.write "GET /yaml.Z HTTP/1.1\r\nHost: gems.rubyforge.org\r\n\r\n" (Hangs) I also tried to write a small script to show the problem. ------- require 'socket' hostname = ARGV[0] puts "Making socket to #{hostname}" sock = TCPSocket.new(hostname, 80) mesg = "GET /yaml.Z HTTP/1.1\r\nHost: #{hostname}\r\n\r\n" puts "writing to socket #{hostname}: " + mesg sock.write mesg puts "Wow, no hang!" ----- Here's the output: ------ C:\>ruby test.rb google.com Making socket to google.com writing to socket google.com: GET /yaml.Z HTTP/1.1 Host: google.com ------ But wget works, so my internet connection is fine, DNS resolves the names, and I don't have any problems communicating with either gems.rubyforge.org or google.com. Even trying a connection to localhost:8080 (Tomcat) failed. So any idea how I can fix this problem? It just seems like Ruby can't write to any sockets at all, or am I misinterpreting the symptoms. I'd truly love to start working with Ruby, and I'm very interested in Rails, but I can't see how I can really dive in unless I can get sockets to just work. Thanks in advance for your help, Tim On 7/13/05, Jim Weirich wrote: > On Wednesday 13 July 2005 02:15 am, Tim Shadel wrote: > > Hi, > > > > I'm new to Ruby, and gem is hanging when it attempts to update the gem > > source index (which happens every time I try to install anything, > > obviously). > [...] > > >gem --debug --backtrace install rails > [...] > > Exception `TypeError' at > > c:/ruby/lib/ruby/site_ruby/1.8/rubygems/remote_installer.rb:222 - > > incompatible marshal file format (can't be read) > > format version 4.8 required; 45.45 given > > Updating Gem source index for: http://gems.rubyforge.org > > It is actually working as intended, except for the hang during the source > index update. Gem detects that loading your cache failed (incompatible > marshal format), so it attempts to download the source index. > > You can just blow away the cache file. It is named "source_cache" in the > directory returned by the command 'gem env gempath'. If the `gem env > gempath` directory is protected, you may also have another copy of the cache > in $HOME/.gem. > > Blowing it away will get rid of the marshal file format error. I don't know > if it will solve the download problem or not. > > -- > -- Jim Weirich jim@weirichhouse.org http://onestepback.org > ----------------------------------------------------------------- > "Beware of bugs in the above code; I have only proved it correct, > not tried it." -- Donald Knuth (in a memo to Peter van Emde Boas) > >