func New(srv *http.Server) *Supervisor {
	return &Supervisor{
		Server:      srv,
		unblockChan: make(chan struct{}, 1),
	}
}
New returns a new host supervisor
based on a native net/http "srv".

It contains all native net/http's Server methods.
Plus you can add tasks on specific events.
It has its own flow, which means that you can prevent
to return and exit and restore the flow too.
package host
import (
	"context"
	"crypto/tls"
	"net"
	"net/http"
	"strings"
	"sync"
	"sync/atomic"
	"time"
	"golang.org/x/crypto/acme/autocert"
	"github.com/kataras/iris/core/errors"
	"github.com/kataras/iris/core/netutil"
)
type Configurator func(su *Supervisor)
type Supervisor struct {
	Server         *http.Server
	closedManually int32  
	manuallyTLS    bool   
	shouldWait     int32  
	unblockChan    chan struct{}
	mu sync.Mutex
	onServe []func(TaskHost)
	IgnoredErrors []string
	onErr         []func(error)
	onShutdown    []func()
}