private AsyncFuture<ProtocolConnection> bindTCP(
final Logger log, final Protocol protocol, ProtocolServer server, RetryPolicy policy
) {
final ServerBootstrap b = new ServerBootstrap();
b.group(boss, worker);
b.channel(NioServerSocketChannel.class);
b.childHandler(server.initializer());
b.option(ChannelOption.SO_BACKLOG, 128);
if (protocol.getReceiveBufferSize() != null) {
b.childOption(ChannelOption.SO_RCVBUF, protocol.getReceiveBufferSize());
}
b.childOption(ChannelOption.SO_KEEPALIVE, true);
final String host = protocol.getAddress().getHostString();
final int port = protocol.getAddress().getPort();
final RetryingProtocolConnection connection =
new RetryingProtocolConnection(async, timer, log, policy, new ProtocolChannelSetup() {
@Override
public ChannelFuture setup() {
return b.bind(host, port);
}
@Override
public String toString() {
return String.format("bind tcp://%s:%d", host, port);
}
});
return connection.getInitialFuture();
}