= nng_http_server_hold(3http)
//
// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
//
// This document is supplied under the terms of the MIT License, a
// copy of which should be located in the distribution where this
// file was obtained (LICENSE.txt).  A copy of the license may also be
// found online at https://opensource.org/licenses/MIT.
//

== NAME

nng_http_server_hold - get and hold HTTP server instance

== SYNOPSIS

[source, c]
----
#include <nng/nng.h>
#include <nng/supplemental/http/http.h>

int nng_http_server_hold(nng_http_server **serverp, const nng_url *url);
----

== DESCRIPTION

The `nng_http_server_hold()` acquires an instance of an HTTP server suitable
for use in serving the URL identified by _url_, and stores a pointer to it
at the location pointed to by _serverp_.

This function first looks to see if an existing HTTP server instance exists,
that is suitable for this.
If so, it increments the reference count on it and uses that.
Otherwise, it will attempt to create a new server instance
with an initial reference count of one (1).

The server instance is not started, and can have additional configuration
applied to it before it is later started with
xref:nng_http_server_start.3http.adoc[`nng_http_server_start()`].

NOTE: The URL matching logic in determining servers is unable to distinguish
between different aliases for the same local IP address.
This may create problems when using URLs for virtual hosting.
It is recommended to use canonical IP addresses or names in the
_url_ to avoid confusion.

== RETURN VALUES

This function returns 0 on success, and non-zero otherwise.

== ERRORS

[horizontal]
`NNG_ENOMEM`:: Insufficient free memory exists.
`NNG_ENOTSUP`:: HTTP not supported.

== SEE ALSO

[.text-left]
xref:nng_http_server_add_handler.3http.adoc[nng_http_server_add_handler(3http)],
xref:nng_http_server_release.3http.adoc[nng_http_server_release(3http)],
xref:nng_http_server_stop.3http.adoc[nng_http_server_stop(3http)],
xref:nng_url_parse.3.adoc[nng_url_parse(3)]
xref:nng_strerror.3.adoc[nng_strerror(3)],
xref:nng.7.adoc[nng(7)]
