public static <Request extends AbstractRequest, Response extends AbstractResponse>
    SocketConnection<Request, Response> createServerConnection(int defaultPort, @Nullable InetAddress bindAddress, int attempts, RequestResponseExternalizerFactory<Request, Response> factory) {
    return new ServerSocketConnectionImpl<>(defaultPort, bindAddress, attempts, factory);
  }
public static <Request extends AbstractRequest, Response extends AbstractResponse>
    SocketConnection<Request, Response> createServerConnection(int defaultPort, @Nullable InetAddress bindAddress, int attempts, RequestResponseExternalizerFactory<Request, Response> factory)