Есть асинхронный TCP-сервер (реализованный через gen_server), принимающий подключения, и есть supervisor, который для каждого такого подключения создает себе дочерние процессы. На всякий случай, сразу отмечу, что сокеты имеют флаг {keepalive, true}. Для того, чтобы не тащить сами сокеты через аргументы функций (и повысить таким образом уровень абстракции), я создал функции, которые через замыкание используют нужный сокет:
Receiver = fun() ->
case gen_tcp:recv(Sock, 0) of
{ok, Packet} -> ... read more