You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "liumin (Jira)" <ji...@apache.org> on 2021/04/16 15:25:00 UTC
[jira] [Created] (THRIFT-5399) Fix socket leak in abnormal
situation
liumin created THRIFT-5399:
------------------------------
Summary: Fix socket leak in abnormal situation
Key: THRIFT-5399
URL: https://issues.apache.org/jira/browse/THRIFT-5399
Project: Thrift
Issue Type: Bug
Components: C glib - Library
Affects Versions: 0.14.1, 0.14.0, 0.13.0, 0.12.0
Reporter: liumin
Fix For: 0.15.0
In "thrift_server_socket_listen" function, after the socket is created, the exception branch does not have a close socket.
gboolean
thrift_server_socket_listen (ThriftServerTransport *transport, GError **error)
{
int enabled = 1; /* for setsockopt() */
ThriftServerSocket *tsocket = THRIFT_SERVER_SOCKET (transport);
const int socket_domain = tsocket->path ? PF_UNIX : AF_INET;
/* create a socket */
if ((tsocket->sd = socket (socket_domain, SOCK_STREAM, 0)) == -1)
{
g_set_error (error, THRIFT_SERVER_SOCKET_ERROR,
THRIFT_SERVER_SOCKET_ERROR_SOCKET,
"failed to create socket - %s", strerror (errno));
return FALSE;
}
if (setsockopt(tsocket->sd, SOL_SOCKET, SO_REUSEADDR, &enabled,
sizeof(enabled)) == -1)
{
g_set_error (error, THRIFT_SERVER_SOCKET_ERROR,
THRIFT_SERVER_SOCKET_ERROR_SETSOCKOPT,
"unable to set SO_REUSEADDR - %s", strerror(errno));
return FALSE; // -----------> socket leak.
}
......
--
This message was sent by Atlassian Jira
(v8.3.4#803005)