Mon Dec 3 22:44:09 CET 2001
I have an erlang process which runs as a concurrent TCP server. It
functions as a gateway between non-erlang processes and Erlang processes.
The server listens on a well-known TCP port and spawns a child to handle
each request. The child will parse TCP input and forward the request via
Erlang messaging to the appropriate Erlang server, waiting for a response
(another Erlang message) before responding over TCP and closing the TCP
The problem is that when the server is hit hard the clients receive an
emfile error, which I understand could be the result of a UNIX process
(the erlang node, in this case) running out of descriptors.
Is this a known problem with concurrent erlang servers? I would not
expect this same error if my server was in C and it fork()'d children, as
each child would then have its own descriptor table and would have very
few entries in it (stdin, stdout, stderr, TCP client socket).
I wonder if the entire node appears to the host OS as a single process
(perhaps one with many threads), in which case I would expect this problem
with most any concurrent server.
Please forgive me if I am doing something silly or am missing some
fundemental coding convention that would have alleviated this problem.
More information about the erlang-questions