[erlang-questions] Question on building a Parallel Server

Jesper Louis Andersen jesper.louis.andersen@REDACTED
Sun Feb 8 16:35:57 CET 2015

On Sun, Feb 8, 2015 at 5:52 AM, Harit Himanshu <
harit.subscriptions@REDACTED> wrote:

> My question is following
>    1. How does killing of controlling process affect the process owned by
>    Listen
>    2. If we reverse this approach, how does killing of process (which
>    owns Listen) affects n controlling processes (for n different Sockets
>    associated with this Listen process)?
The ListenSock has a ListenProcess. An AcceptProcess calling {ok, ASock} =
gen_tcp:accept(ListenSock) creates a new socket, ASock. The control rules

ListenProcess controls ListenSock
AcceptProcess controls ASock

Termination of ListenProcess will affect the socket directly under its
control, ListenSock, but will not touch ASock. Vice versa, termination of
AcceptProcess will close ASock, but not affect ListenSock in any way. In
other words, the two sockets bear no relation to each other, other than one
was used to create the other.

There are some caveats to look out for, however. Often, you run the
Listener in one process, away from workers since it protects the system.
And error in one part doesn't affect the other part. Once a listen socket
closes, the operating system doesn't let you reuse that socket immediately,
but imposes a "linger time" in which you can't rebind to the Address/Port
combination. The reason for the lingering is to make sure drain happens
such that you don't inadvertedly connect up incorrectly. You may want to
enable the SO_REUSEADDR socket option, which is done in Erlang by creating
the listen socket with the {reuseaddr, true} option. It does other things
than just solve the lingering problem however, and exactly what it does is
OS dependent.

The best solution is to trust the ListenProcess more than the workers. That
is, place the ListenProcess higher up in the supervisor tree and make its
death be fatal to the system. If the operating system suddenly denies you
access to the Listen socket, chances are you have a major problem.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20150208/abc030b3/attachment.htm>

More information about the erlang-questions mailing list