[erlang-questions] gen_tcp nonblocking send

Dave Smith <>
Thu May 1 00:22:14 CEST 2008

It is my understanding that gen_tcp:send never blocks, since it's just
queuing up a message for the process handling the socket.  If I had to
guess, I'd say that under the covers it's queuing up the data using
the driver_enq (see ERTS erl_driver) and then when the socket is ready
to write, the VM pushes that data into the socket (since all sockets
are non-blocking in the VM, or so I would presume).

Hope that helps...


On Wed, Apr 30, 2008 at 3:38 PM, Daniel Ginsburg <> wrote:
> Is there any way to make gen_tcp:send operate in non-blocking mode?
>  As I read the documentation, there are two possible ways to handle
>  stalling reader:
>  1) block forever
>  2) use {send_timeout, N} and when timeout occurs, close the socket.
>  In my application 2 is unacceptable and 1 is suboptimal.
>  What I'd really like to have is an opportunity to know that kernel send
>  buffer is filled and send would block, and conversely, when stalled
>  receiver has recovered and I can send more data. It that possible with
>  standard erlang library? I'd really hate to write my own driver to
>  handle this.
>  _______________________________________________
>  erlang-questions mailing list
>  http://www.erlang.org/mailman/listinfo/erlang-questions

More information about the erlang-questions mailing list