Hi all,

I'm trying to use Thrift for cross-language invocations and need to bind my
server to a specific host IP address instead of the wildcard address (as I
have multiple ethernet interfaces on my box, but don't want to listen on
all of them).

TServerSocket.cpp is currently coded to bind to the wildcard address, like
this:
// Wildcard address
error = getaddrinfo(NULL, port, &hints, &res0);

I'm thinking about adding a host parameter to TServerSocket to *optionally*
bind to a specific host address, and allow a server to be set up like this:
int main(int argc, char **argv) {
  const string host = "myserver.example.com";
  int port = 9090;
  shared_ptr handler(new UserStorageHandler());
  shared_ptr processor(new UserStorageProcessor(handler));
  // You can now specifying both host and port
  shared_ptr serverTransport(new TServerSocket(host, port));
  shared_ptr transportFactory(new TBufferedTransportFactory());
  shared_ptr protocolFactory(new TBinaryProtocolFactory());
  TSimpleServer server(processor, serverTransport, transportFactory,
protocolFactory);
  server.serve();
  return 0;
}

I've pushed a strawman change to a Github branch [1] to show what it'd look
like, and have a few questions:

- Does that look like a reasonable addition?

- Which test cases should I adapt to use that new parameter? or should I
add new separate test cases for this?

- I'd have to make similar changes to TSSLServerSocket and
TNonblockingServer too I guess (as that server socket setup code seems
duplicated in a few places), then later on add an option to the Thrift code
generator to configure the host in generated server skeletons, right? Can
you think of any other adjustments I'd have to make?

Thanks!

[1]
https://github.com/jsdelfino/thrift/commit/35ece91f0cba9b875b036c473e0566e9b40fa8eb

- Jean-Sebastien

Reply via email to