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)
=> #<TCPSocket:0x2d3c960>
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 <jim / weirichhouse.org> 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)
> 
>