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


#1

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


#2

On 13.05.2009, at 16:41, Clemens W. 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


#3

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 W. 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


#4

On 18.05.2009, at 07:39, Clemens W. wrote:

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

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

regards, Sandor
Szücs