Diwaker Gupta created THRIFT-1676:
-------------------------------------
Summary: Allow specifying IP/hostname in TServer::serve
Key: THRIFT-1676
URL: https://issues.apache.org/jira/browse/THRIFT-1676
Project: Thrift
Issue Type: Improvement
Components: C++ - Library
Affects Versions: 0.8
Environment: Mac OS X. Thrift 0.8.0.
Reporter: Diwaker Gupta
Assignee: Jake Farrell
Thrift doesn't allow users to specify which IP/hostname to use for bind. As a
result, a Thrift server usually ends up listening on ALL interfaces on a
machine (bind uses INADDR_ANY). This is clearly undesirable in many cases where
we may want to restrict connectivity to localhost or to within a particular
subnet or targeted towards a specific host or IP.
Here's a example of what TNonblockingServer does:
{code}
// Wildcard address
error = getaddrinfo(NULL, port, &hints, &res0);
if (error) {
throw TException("TNonblockingServer::serve() getaddrinfo " +
string(gai_strerror(error)));
}
// Pick the ipv6 address first since ipv4 addresses can be mapped
// into ipv6 space.
for (res = res0; res; res = res->ai_next) {
if (res->ai_family == AF_INET6 || res->ai_next == NULL)
break;
}
{code}
As can be seen, the above code fragment provides NULL as the first param to
getaddrinfo and always specifies AI_PASSIVE. This results in the behavior I
described above.
A better approach IMO is to provide the following interface instead:
{code}
TServer::serve(const char* hostOrIp, int port)
{code}
This is consistent with what other modern server frameworks do (node.js, netty
etc.)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira