@SuppressWarnings("FutureReturnValueIgnored")
	public static Mono<Channel> bind(TransportConfig config, ChannelInitializer<Channel> channelInitializer,
			SocketAddress bindAddress, boolean isDomainSocket) {
		Objects.requireNonNull(config, "config");
		Objects.requireNonNull(bindAddress, "bindAddress");
		Objects.requireNonNull(channelInitializer, "channelInitializer");

		return doInitAndRegister(config, channelInitializer, isDomainSocket, config.eventLoopGroup().next())
				.flatMap(channel -> {
					MonoChannelPromise promise = new MonoChannelPromise(channel);
					// "FutureReturnValueIgnored" this is deliberate
					channel.eventLoop().execute(() -> channel.bind(bindAddress, promise.unvoid()));
					return promise;
				});
	}
@Test
	@SuppressWarnings("FutureReturnValueIgnored")
	void bind_whenBindException_thenChannelIsUnregistered() {
		final TcpClientConfig transportConfig = TcpClient.newConnection().configuration();
		final Channel channel1 = TransportConnector.bind(
				transportConfig,
				new RecordingChannelInitializer(),
				new InetSocketAddress("localhost", 0),
				false).block(Duration.ofSeconds(5));
		final RecordingChannelInitializer channelInitializer = new RecordingChannelInitializer();
		assertThatThrownBy(() -> TransportConnector.bind(
				transportConfig,
				channelInitializer,
				new InetSocketAddress("localhost", ((InetSocketAddress) channel1.localAddress()).getPort()),
				false).block(Duration.ofSeconds(5)));
		final Channel channel2 = channelInitializer.channel;
		assertThat(channel1.isRegistered()).isTrue();
		assertThat(channel2.isRegistered()).isFalse();
		channel1.close();
	}