[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

"Too many open files - socket(2)" when invoking Socket.new

Clemens Wyss

5/13/2009 2:42:00 PM

Given the follwing code snippet:

require 'socket'
include Socket::Constants
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in( 1313, 'localhost' )
socket.bind( sockaddr )
socket.listen( 5 )
client, client_sockaddr = socket.accept
client.puts "Hello from script one!"
puts "The client said, '#{client.readline.chomp}'"
client.puts "Hello from script one!"
socket.close

On my WinXP development machine this script runs as expected. Running it
on a WinXpEmbedded machine throws a
Too many open files - socket(2) (Errno::EMFILE)
exception on the line
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
What could cause this exception?

Any advice help appreciated
Clemens
--
Posted via http://www.ruby-....

3 Answers

Sandor Szücs

5/16/2009 9:33:00 PM

0


On 13.05.2009, at 16:41, Clemens Wyss wrote:

> Given the follwing code snippet:
>
>
> require 'socket'
> include Socket::Constants
begin
>
> socket =3D Socket.new( AF_INET, SOCK_STREAM, 0 )
> sockaddr =3D Socket.pack_sockaddr_in( 1313, 'localhost' )
> socket.bind( sockaddr )
> socket.listen( 5 )
> client, client_sockaddr =3D socket.accept
> client.puts "Hello from script one!"
> puts "The client said, '#{client.readline.chomp}'"
> client.puts "Hello from script one!"
ensure
>
> socket.close
end


Try to add these statements in your code and reboot your box,
then it should not happen.

> On my WinXP development machine this script runs as expected. =20
> Running it
> on a WinXpEmbedded machine throws a
> Too many open files - socket(2) (Errno::EMFILE)
> exception on the line
> socket =3D Socket.new( AF_INET, SOCK_STREAM, 0 )
> What could cause this exception?


Too many open files for your OS results in such an exception.

regards, Sandor Sz=FCcs
--=

Clemens Wyss

5/18/2009 5:39:00 AM

0

Dear Sandor,
I don't see why your exception handling code should be of any help. The
exception per se is the problem.

Why (on XP embedded only) do I get
Too many open files - socket(2) (Errno::EMFILE)
on the line
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
?
Also: opening the very same port with a simple VB App works, even on XP
embedded...

Still any help/advice appreciated
Clemens

Sandor Szücs wrote:
> On 13.05.2009, at 16:41, Clemens Wyss wrote:
>
>> Given the follwing code snippet:
>>
>>
>> require 'socket'
>> include Socket::Constants
> begin
>>
>> socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
>> sockaddr = Socket.pack_sockaddr_in( 1313, 'localhost' )
>> socket.bind( sockaddr )
>> socket.listen( 5 )
>> client, client_sockaddr = socket.accept
>> client.puts "Hello from script one!"
>> puts "The client said, '#{client.readline.chomp}'"
>> client.puts "Hello from script one!"
> ensure
>>
>> socket.close
> end
>
>
> Try to add these statements in your code and reboot your box,
> then it should not happen.
>
>> On my WinXP development machine this script runs as expected.
>> Running it
>> on a WinXpEmbedded machine throws a
>> Too many open files - socket(2) (Errno::EMFILE)
>> exception on the line
>> socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
>> What could cause this exception?
>
>
> Too many open files for your OS results in such an exception.
>
> regards, Sandor
> Sz�cs

--
Posted via http://www.ruby-....

Sandor Szücs

5/18/2009 12:48:00 PM

0


On 18.05.2009, at 07:39, Clemens Wyss wrote:

> I don't see why your exception handling code should be of any help. =20=

> The
> exception per se is the problem.

True, but I thought if you try to run your code and it doesn't close =20
the sockets,
then you get open files.... It's better to ensure the close operation.

regards, Sandor Sz=FCcs
--