[erlang-questions] No message sent when closing socket

Christoph Dornheim <>
Wed Feb 28 20:02:03 CET 2007


Hi, 

I have an application where a TCP-connection should be terminated by any process
having its socket available. The socket S is accepted by a server socket running
in active mode: 

gen_tcp:listen(1234, [list, {packet, line}, {active, true}])

The controlling process receives the incoming data from S as expected. The
receive clause lets the process terminate normally when the message
{tcp_closed,S} is received.

I expected that gen_tcp:close(S) sends this message to the controlling process,
but unfortunately, no message is sent (although the socket got closed, confirmed
by inet:i() ).  

Did I miss something in the gen_tcp documentation? Alternatively, I can use
gen_tcp:shutdown(S, read_write) which works fine and sends the close message.

I'm wondering why gen_tcp:close does not inform the controlling process that its
socket is closed. Is it generally a better way to close a socket by using
gen_tcp:shutdown instead of gen_tcp:close?


Best regards,

Christoph




More information about the erlang-questions mailing list