Why is my http call failing?

T

Thaddeus L Olczyk

The code is simple:

Net::HTTP.start("code.whytheluckystiff.net",80) { |http|
print(http.head('/yaml'))
}

The error I get is that an EINVAL exception was generated.

Using telnet to preform the same request, everything seems fine.

I am using the latest version of Ruby on Windows ( NT4 SP6 ).
 
W

William Crawford

Thaddeus said:
The code is simple:

Net::HTTP.start("code.whytheluckystiff.net",80) { |http|
print(http.head('/yaml'))
}

The error I get is that an EINVAL exception was generated.

Using telnet to preform the same request, everything seems fine.

I am using the latest version of Ruby on Windows ( NT4 SP6 ).

That code seems to work fine on linux with Ruby 1.8.4. I get:

#<Net::HTTPOK:0xb7bef67c>=> nil

And if I change to .get('/yaml').body I get the body of the page, as
expected.
 
R

Robert Klemme

William said:
That code seems to work fine on linux with Ruby 1.8.4. I get:

#<Net::HTTPOK:0xb7bef67c>=> nil

And if I change to .get('/yaml').body I get the body of the page, as
expected.

Works for me, too.

Local firewall that explicitly blocks accesses from ruby and not from
telnet? Just a wild guess...

robert
 
F

Francis Cianfrocca

Thaddeus said:
The code is simple:

Net::HTTP.start("code.whytheluckystiff.net",80) { |http|
print(http.head('/yaml'))
}

The error I get is that an EINVAL exception was generated.

Using telnet to preform the same request, everything seems fine.

I am using the latest version of Ruby on Windows ( NT4 SP6 ).

What happens if you use a more recent version of Windows?
 
T

Thaddeus L Olczyk

everything seems fine.

Works for me, too.

Local firewall that explicitly blocks accesses from ruby and not from
telnet? Just a wild guess...
The firewall I use is zonealarm. It keeps prompting me to allow ruby
to pass ( I keep saying yes ). In fact I even set remember this
setting and yes. I had to remove ruby toi clear it.

It seems to me there is some aspect of Windows networking that is
not working right. It is something that most programs, if they use it,
they do not rely on it. But ruby networking just relies on it. I'm
hoping someone can tell me.
 
J

James Britt

Francis said:
What happens if you use a more recent version of Windows?

This works for me on WinXP and a somewhat recent version of Curt's
Windows build:

require 'net/http'

Net::HTTP.start("code.whytheluckystiff.net",80) { |http|
print(http.head('/yaml'))
}
#<Net::HTTPOK:0x2b4bff0>


I have ZoneAlarm, but it's been tamed to allow Ruby code. I have the
built-in Windows firewall turned off.


--
James Britt

http://www.ruby-doc.org - Ruby Help & Documentation
http://www.artima.com/rubycs/ - The Journal By & For Rubyists
http://www.rubystuff.com - The Ruby Store for Ruby Stuff
http://www.jamesbritt.com - Playing with Better Toys
 
E

Ezra Zygmuntowicz

The firewall I use is zonealarm. It keeps prompting me to allow ruby
to pass ( I keep saying yes ). In fact I even set remember this
setting and yes. I had to remove ruby toi clear it.

It seems to me there is some aspect of Windows networking that is
not working right. It is something that most programs, if they use it,
they do not rely on it. But ruby networking just relies on it. I'm
hoping someone can tell me.


I have seen this same issue on windows before. ZoneAlarm interferes
with ruby's socket access. You need to uninstall ZoneAlarm and it
will work fine. Just disabling Zone Alarm will not work , you have to
completely uninstall it.

-Ezra
 
J

James Britt

Ezra said:
I have seen this same issue on windows before. ZoneAlarm interferes
with ruby's socket access. You need to uninstall ZoneAlarm and it will
work fine. Just disabling Zone Alarm will not work , you have to
completely uninstall it.

Interesting. I have ZA installed on two different WinXP boxen, and a
now-gone Win2k box, and never had an issue with Ruby getting out to the
Internet.

However, a recent version of ZA was annoying in one way or another, so I
rolled back to a previous version. So perhaps the more current versions
are Ruby-hostile, but it's never been an issue for me.
 
E

Ezra Zygmuntowicz

Interesting. I have ZA installed on two different WinXP boxen, and
a now-gone Win2k box, and never had an issue with Ruby getting out
to the Internet.

However, a recent version of ZA was annoying in one way or another,
so I rolled back to a previous version. So perhaps the more
current versions are Ruby-hostile, but it's never been an issue
for me.


It has been a while since I've seen this issue as I don't use
windows very often. But it was completely repeatable when I did have
the issue at the end of last year.

-Ezra
 
T

Thaddeus L Olczyk

I have seen this same issue on windows before. ZoneAlarm interferes
with ruby's socket access. You need to uninstall ZoneAlarm and it
will work fine. Just disabling Zone Alarm will not work , you have to
completely uninstall it.

-Ezra
Hmmm.
Hard to say. If you disble it as a service, it should have no effect.
Anyway I'm hesitant to disable my firewall unless I have something
else in place. I wish there were a way ( like Posix's strace ) to
trace system calls and see exactl;y what is going wrong.
 
R

Robert Klemme

Thaddeus said:
Hmmm.
Hard to say. If you disble it as a service, it should have no effect.
Anyway I'm hesitant to disable my firewall unless I have something
else in place. I wish there were a way ( like Posix's strace ) to
trace system calls and see exactl;y what is going wrong.

You can try Kerio Personal Firewall - personally I like it better than
ZA because it offers more precise control IMHO (disclaimer: I haven't
tested ZA thoroughly so I may have missed some advanced features).

http://www.sunbelt-software.com/Kerio.cfm

Kind regards

robert
 
T

Thaddeus L Olczyk

You can try Kerio Personal Firewall - personally I like it better than
ZA because it offers more precise control IMHO (disclaimer: I haven't
tested ZA thoroughly so I may have missed some advanced features).

http://www.sunbelt-software.com/Kerio.cfm

Kind regards

robert
I removed ZA and installed Sygate. No difference.
(Before and after I installed Sygate. )
 
T

Thaddeus L Olczyk

I've gone further. This following call snippet fails:

require 'socket'

t=TCPSocket.open("code.whytheluckystiff.net",80)
str1='GET /yaml HTTP/1.1\r\n\r\n'
t.write(str1)

of course with an EINVAL error.

AFAIC write a calling a C function. So why would calling
a C function cause a EINVAL ( this is not rhetorical ).

I believe earlier calls have probably been executed earlier in the
same library ( the open works ).

Suggestions?

The code is simple:

Net::HTTP.start("code.whytheluckystiff.net",80) { |http|
print(http.head('/yaml'))
}

The error I get is that an EINVAL exception was generated.

Using telnet to preform the same request, everything seems fine.

I am using the latest version of Ruby on Windows ( NT4 SP6 ).
Let me add that it is the one click installer available from rubyforge
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top