         self.port = port
     }
 
-    public init(address: String? = nil, port: Int = 8080, certificate: String, privateKey: String, certificateChain: String? = nil, parser: S4.RequestParser = RequestParser(), middleware: Middleware..., serializer: S4.ResponseSerializer = ResponseSerializer(), respond: Respond) throws {
-        self.server = try TCPSSLStreamServer(
-            address: address,
-            port: port,
+    public init(at host: String = "0.0.0.0", on port: Int = 8080, certificate: String, privateKey: String, certificateChain: String? = nil, reusingPort reusePort: Bool = false, parser: S4.RequestParser = RequestParser(), middleware: Middleware..., serializer: S4.ResponseSerializer = ResponseSerializer(), _ respond: Respond) throws {
+        self.server = try TCPSSLServer(
+            at: host,
+            on: port,
+            reusingPort: reusePort,
             certificate: certificate,
             privateKey: privateKey,
             certificateChain: certificateChain

    }

    private func printHeader() {
        print("")
        print("")
        print("")
        print("                             _____")
        print("     ,.-``-._.-``-.,        /__  /  ___ _      ______")
        print("    |`-._,.-`-.,_.-`|         / /  / _ \\ | /| / / __ \\")
        print("    |   |ˆ-. .-`|   |        / /__/  __/ |/ |/ / /_/ /")
        print("    `-.,|   |   |,.-`       /____/\\___/|__/|__/\\____/ (c)")
        print("        `-.,|,.-`           -----------------------------")
        print("")
        print("================================================================================")
        print("Started HTTP server, listening on port \(port).")
    }
}

extension Request {
    var connection: HeaderValues {
        get {
            return headers.headers["connection"] ?? HeaderValues([])
        }

        set(connection) {

    public func start(failure: ErrorProtocol -> Void = Server.printError) throws {
        printHeader()
        while true {
            let stream = try server.accept(timingOut: .never)
            co {
                do {
                    try self.processStream(stream)
