[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Bad file descriptor error using Net::HTTP

brian.wil.greene

6/28/2007 2:16:00 PM

I am trying to access a .net page via my ruby app and pass it a couple
parameters. Every thing I have tried has resulted in this Bad file
descriptor, I am wondering if it is something wrong with my
configuration, not the code. Here is the code that is causing
problems:

Net::HTTP.version_1_2
Net::HTTP.start('www.url.com', 80) {
|http|
response =
http.post('/DoSomething.aspx',
'id=#{params[:id]}&path=#{params[:imagerecord]}',
{ 'Content-Type' => 'application/x-www-form-
urlencoded' })
puts response.body()
}

Here is the error I get:

Errno::EBADF (Bad file descriptor - connect(2)):
c:/ruby/lib/ruby/1.8/net/http.rb:560:in `initialize'
c:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
c:/ruby/lib/ruby/1.8/timeout.rb:48:in `timeout'
c:/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout'
c:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
c:/ruby/lib/ruby/1.8/net/http.rb:553:in `do_start'
c:/ruby/lib/ruby/1.8/net/http.rb:542:in `start'
c:/ruby/lib/ruby/1.8/net/http.rb:440:in `start'

I am on Windows 2003 serer with Ruby 1.8.4 and Mongrel. Any help would
be greatly appreciated.

4 Answers

Daniel Berger

6/28/2007 2:57:00 PM

0



On Jun 28, 8:20 am, brian.wil.gre...@gmail.com wrote:
> I am trying to access a .net page via my ruby app and pass it a couple
> parameters. Every thing I have tried has resulted in this Bad file
> descriptor, I am wondering if it is something wrong with my
> configuration, not the code. Here is the code that is causing
> problems:
>
> Net::HTTP.version_1_2
> Net::HTTP.start('www.url.com', 80) {
> |http|
> response =
> http.post('/DoSomething.aspx',
> 'id=#{params[:id]}&path=#{params[:imagerecord]}',
> { 'Content-Type' => 'application/x-www-form-
> urlencoded' })
> puts response.body()
> }
>
> Here is the error I get:
>
> Errno::EBADF (Bad file descriptor - connect(2)):
> c:/ruby/lib/ruby/1.8/net/http.rb:560:in `initialize'
> c:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
> c:/ruby/lib/ruby/1.8/timeout.rb:48:in `timeout'
> c:/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout'
> c:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
> c:/ruby/lib/ruby/1.8/net/http.rb:553:in `do_start'
> c:/ruby/lib/ruby/1.8/net/http.rb:542:in `start'
> c:/ruby/lib/ruby/1.8/net/http.rb:440:in `start'
>
> I am on Windows 2003 serer with Ruby 1.8.4 and Mongrel. Any help would
> be greatly appreciated.

Line 560 of net/http.rb is this:

s = timeout(@open_timeout) { TCPSocket.open(conn_address(),
conn_port()) }

What happens when you run this standalone snippet?

require 'socket'
require 'timeout'

s = Timeout.timeout(5){
TCPSocket.open(url, 80)
}

p s

s.close

Regards,

Dan


brian.wil.greene

6/28/2007 3:17:00 PM

0

On Jun 28, 10:57 am, Daniel Berger <djber...@gmail.com> wrote:
> On Jun 28, 8:20 am, brian.wil.gre...@gmail.com wrote:
>
>
>
> > I am trying to access a .net page via my ruby app and pass it a couple
> > parameters. Every thing I have tried has resulted in this Bad file
> > descriptor, I am wondering if it is something wrong with my
> > configuration, not the code. Here is the code that is causing
> > problems:
>
> > Net::HTTP.version_1_2
> > Net::HTTP.start('www.url.com', 80) {
> > |http|
> > response =
> > http.post('/DoSomething.aspx',
> > 'id=#{params[:id]}&path=#{params[:imagerecord]}',
> > { 'Content-Type' => 'application/x-www-form-
> > urlencoded' })
> > puts response.body()
> > }
>
> > Here is the error I get:
>
> > Errno::EBADF (Bad file descriptor - connect(2)):
> > c:/ruby/lib/ruby/1.8/net/http.rb:560:in `initialize'
> > c:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
> > c:/ruby/lib/ruby/1.8/timeout.rb:48:in `timeout'
> > c:/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout'
> > c:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
> > c:/ruby/lib/ruby/1.8/net/http.rb:553:in `do_start'
> > c:/ruby/lib/ruby/1.8/net/http.rb:542:in `start'
> > c:/ruby/lib/ruby/1.8/net/http.rb:440:in `start'
>
> > I am on Windows 2003 serer with Ruby 1.8.4 and Mongrel. Any help would
> > be greatly appreciated.
>
> Line 560 of net/http.rb is this:
>
> s = timeout(@open_timeout) { TCPSocket.open(conn_address(),
> conn_port()) }
>
> What happens when you run this standalone snippet?
>
> require 'socket'
> require 'timeout'
>
> s = Timeout.timeout(5){
> TCPSocket.open(url, 80)
>
> }
>
> p s
>
> s.close
>
> Regards,
>
> Dan


Dan,

Thanks. Here is the error I get when executing the above code:

Timeout::Error (execution expired):
c:/ruby/lib/ruby/1.8/timeout.rb:54:in `open'
c:/ruby/lib/ruby/1.8/timeout.rb:56:in `timeout'

I know it's a valid URL. The page I am trying to access is sitting on
the same box as my rails app.

Daniel Berger

6/28/2007 4:27:00 PM

0

On Jun 28, 9:20 am, brian.wil.gre...@gmail.com wrote:
> On Jun 28, 10:57 am, Daniel Berger <djber...@gmail.com> wrote:

<snip>

> > > I am on Windows 2003 serer with Ruby 1.8.4 and Mongrel. Any help would
> > > be greatly appreciated.
>
> > Line 560 of net/http.rb is this:
>
> > s = timeout(@open_timeout) { TCPSocket.open(conn_address(),
> > conn_port()) }
>
> > What happens when you run this standalone snippet?
>
> > require 'socket'
> > require 'timeout'
>
> > s = Timeout.timeout(5){
> > TCPSocket.open(url, 80)
>
> > }
>
> > p s
>
> > s.close
>
> > Regards,
>
> > Dan
>
> Dan,
>
> Thanks. Here is the error I get when executing the above code:
>
> Timeout::Error (execution expired):
> c:/ruby/lib/ruby/1.8/timeout.rb:54:in `open'
> c:/ruby/lib/ruby/1.8/timeout.rb:56:in `timeout'
>
> I know it's a valid URL. The page I am trying to access is sitting on
> the same box as my rails app.

That's peculiar. Firewall or proxy issue perhaps? Maybe you need
rubysspi?

http://rubyforge.org/projects...

Otherwise, I'm at a loss.

Regards,

Dan


plamb

7/2/2007 6:51:00 PM

0

On Jun 28, 9:27 am, Daniel Berger <djber...@gmail.com> wrote:
> On Jun 28, 9:20 am, brian.wil.gre...@gmail.com wrote:
>
> > On Jun 28, 10:57 am, Daniel Berger <djber...@gmail.com> wrote:
>
> <snip>
>
>
>
> > > > I am on Windows 2003 serer with Ruby 1.8.4 and Mongrel. Any help would
> > > > be greatly appreciated.
>
> > > Line 560 of net/http.rb is this:
>
> > > s = timeout(@open_timeout) { TCPSocket.open(conn_address(),
> > > conn_port()) }
>
> > > What happens when you run this standalone snippet?
>
> > > require 'socket'
> > > require 'timeout'
>
> > > s = Timeout.timeout(5){
> > > TCPSocket.open(url, 80)
>
> > > }
>
> > > p s
>
> > > s.close
>
> > > Regards,
>
> > > Dan
>
> > Dan,
>
> > Thanks. Here is the error I get when executing the above code:
>
> > Timeout::Error (execution expired):
> > c:/ruby/lib/ruby/1.8/timeout.rb:54:in `open'
> > c:/ruby/lib/ruby/1.8/timeout.rb:56:in `timeout'
>
> > I know it's a valid URL. The page I am trying to access is sitting on
> > the same box as my rails app.
>
> That's peculiar. Firewall or proxy issue perhaps? Maybe you need
> rubysspi?
>
> http://rubyforge.org/projects...
>
> Otherwise, I'm at a loss.
>
> Regards,
>
> Dan

I ran into the same error when I attempted to get a page with an
improperly formatted URL. I tried to get 'www.google.com', which
failed with the same error you encountered. I realized I didn't
include 'http', and when I tried again with 'http://www.googl... it
worked as anticipated.

---
Paul