From 1eb4ac4b41e10ee56fa845f1f6e7df8a79242334 Mon Sep 17 00:00:00 2001
From: Andy Green <andy@warmcat.com>
Date: Sat, 16 Jun 2018 13:23:06 +0800
Subject: [PATCH] LWS_ILLEGAL_HTTP_CONTENT_LEN implies connection:close

If no content-length is coming, we just can't do
http/1.1 keep-alive.
---
 lib/core/context.c      |  2 +-
 lib/roles/http/header.c | 14 +++++++++++---
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/lib/core/context.c b/lib/core/context.c
index 029313b3..c4acac57 100644
--- a/lib/core/context.c
+++ b/lib/core/context.c
@@ -1024,7 +1024,7 @@ lws_create_vhost(struct lws_context *context,
 	return vh;
 
 bail1:
-	lws_vhost_destroy(vh, NULL, NULL);
+	lws_vhost_destroy(vh);
 
 	return NULL;
 
diff --git a/lib/roles/http/header.c b/lib/roles/http/header.c
index 85921c7e..2f020f15 100644
--- a/lib/roles/http/header.c
+++ b/lib/roles/http/header.c
@@ -149,9 +149,17 @@ lws_add_http_common_headers(struct lws *wsi, unsigned int code,
 		    			(int)strlen(content_type), p, end))
 		return 1;
 
-	if (content_len != LWS_ILLEGAL_HTTP_CONTENT_LEN &&
-	    lws_add_http_header_content_length(wsi, content_len, p, end))
-		return 1;
+	if (content_len != LWS_ILLEGAL_HTTP_CONTENT_LEN) {
+		if (lws_add_http_header_content_length(wsi, content_len, p, end))
+			return 1;
+	} else {
+		if (lws_add_http_header_by_token(wsi, WSI_TOKEN_CONNECTION,
+						 (unsigned char *)"close", 5,
+						 p, end))
+			return 1;
+
+		wsi->http.connection_type = HTTP_CONNECTION_CLOSE;
+	}
 
 	return 0;
 }
-- 
GitLab