[erlang-questions] Peername of a closed TCP socket
Dowse, Malcolm
malcolm@REDACTED
Wed Jun 3 13:19:52 CEST 2009
Hi,
Thanks for the tip, but unfortunately it didn't help. After some more
investigation I managed to reproduce the issue. The client was closing
its connection immediately after opening with the SO_LINGER option
enabled, and a timeout of 0 seconds. This resulted in a RST with no FIN.
So, even if I called peername immediately after accept, with option
{exit_on_close, false} set, it always returned enotconn.
However, when I wrote a server in C I had no problem getting the remote
address. The 'accept' C call returns a socket address along with the new
file descriptor. This is also the interface given by the 'accept' call
in python's socket module.
Would it be possible to get a similar accept interface in Erlang, in the
future?
best regards,
malcolm
-----Original Message-----
From: Tony Rogvall [mailto:tony@REDACTED]
Sent: 26 May 2009 22:06
To: Dowse, Malcolm
Cc: Erlang Questions
Subject: Re: [erlang-questions] Peername of a closed TCP socket
You can try the inet option:
{exit_on_close, false}
This will keep the port and the socket active so you can read
statistics,
continue write data to a half open socket and possibly get the
peername, if that is available
by the underlying operating system.
You must then call gen_tcp:close to terminate the port/socket
/Tony
On 26 maj 2009, at 17.39, Malcolm Dowse wrote:
> Hello,
>
> When a TCP client disconnects very soon after connecting to an
> Erlang server, is there any reliable way of getting the client's
> remote address?
>
> The inet:peername/1 function returns an error if the socket in
> question has closed. As a result, I can't find any better solution
> than to refactor the code so that inet:peername/1 is called as soon
> as possible after the gen_tcp:accept/1.
>
> Thanks in advance,
>
> malcolm
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
More information about the erlang-questions
mailing list