[erlang-questions] Sockets leak in ssl_esock
Sergei Golovan
sgolovan@REDACTED
Thu Jul 17 13:47:02 CEST 2008
Hi!
Appears that ssl_esock leaks sockets in case when a remote server
drops an already established connection. The following output was
obtained by enabling debug in ssl_esock:
Erlang (BEAM) emulator version 5.6.3 [source] [smp:2]
[async-threads:0] [kernel-poll:false]
Eshell V5.6.3 (abort with ^G)
1> ssl:start().
ok
2> ssl:connect("localhost",636,[]).
fd = 4
Local proxy listen socket: fd = 4, port = 39302
==========LOOP=============
MASKS SET FOR FD:
Before poll/select: 1 descriptor (total 4)
[CONNECT_CMD] intref = 1, lipstring = 0.0.0.0 lport = 0, fipstring =
127.0.0.1 fport = 636, flags =
fd = 5
fd = 5
-> WAIT_CONNECT fd = 5
==========LOOP=============
MASKS SET FOR FD: 5 (write)
Before poll/select: 2 descriptors (total 5)
-----------------------------------
WAIT_CONNECT fd = 5
-> SSL_CONNECT
==========LOOP=============
MASKS SET FOR FD: 5 (write)
Before poll/select: 2 descriptors (total 5)
-----------------------------------
SSL_CONNECT fd = 5
==========LOOP=============
MASKS SET FOR FD: 5 (read)
Before poll/select: 2 descriptors (total 5)
-----------------------------------
SSL_CONNECT fd = 5
==========LOOP=============
MASKS SET FOR FD: 5 (read)
Before poll/select: 2 descriptors (total 5)
-----------------------------------
SSL_CONNECT fd = 5
-> CONNECTED
==========LOOP=============
MASKS SET FOR FD:
Before poll/select: 2 descriptors (total 5)
-----------------------------------
[PROXY_LISTEN_SOCK] conn accepted: proxyfd = 6, peer port = 41525
Error calling accept()
CONNECTED[PROXY_JOIN_CMD] fd = 5 portnum = 41525
{ok,{sslsocket,5,<0.43.0>}}
3>
-----------------------------------------------------------------------------------------------
(Here connection is established successfully.)
lsof shows the following:
ssl_esock 4313 sergei 4u IPv4 12163520
TCP 127.0.0.1:39302 (LISTEN)
ssl_esock 4313 sergei 5u IPv4 12163527
TCP 127.0.0.1:59963->127.0.0.1:ldaps (ESTABLISHED)
ssl_esock 4313 sergei 6u IPv4 12163530
TCP 127.0.0.1:39302->127.0.0.1:41525 (ESTABLISHED)
-----------------------------------------------------------------------------------------------
-> JOINED
==========LOOP=============
MASKS SET FOR FD: 6 (read) 5 (read)
Before poll/select: 2 descriptors (total 6)
3> -----------------------------------
JOINED: read from ssl fd = 5
read from fd = 5, cc = 0
SSL eof
==========LOOP=============
MASKS SET FOR FD: 6 (read)
Before poll/select: 2 descriptors (total 6)
-----------------------------------
JOINED: reading from proxy, proxyfd = 6
read from proxyfd = 6, cc = 0
-----------------------------------------------------------------------------------------------
(Here I've shutdown the remote server.)
-----------------------------------------------------------------------------------------------
proxy eof or error
-> DEFUNCT
==========LOOP=============
MASKS SET FOR FD:
Before poll/select: 2 descriptors (total 6)
-----------------------------------------------------------------------------------------------
lsof shows the following:
ssl_esock 4313 sergei 4u IPv4 12163520
TCP 127.0.0.1:39302 (LISTEN)
ssl_esock 4313 sergei 5u sock 0,5
12163527 can't identify protocol
ssl_esock 4313 sergei 6u sock 0,5
12163530 can't identify protocol
Note the two last sockets. They are stuck forever (until ssl_esock is running).
Is this a known bug? Is there a way to fix it?
Cheers!
--
Sergei Golovan
More information about the erlang-questions
mailing list