You can pass one socket to multiple Erlang processes. Use one process for sending data and another for receiving.
The only tricky thing with sockets in Erlang is ownership.
If process, that was socket owner dies (or ends without any errors), the socket is closed automatically,
even if other processes are using it.