         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

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

    }

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

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

        set(connection) {
