diff --git a/mongoose.c b/mongoose.c
index 129fcf9d226042afcd18f3266b30915d709b075f..46b7e66ad5d39a2dc82a33dcef4219a6839b06a0 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -2614,7 +2614,6 @@ static int should_keep_alive(const struct mg_connection *conn) {
   const char *method = conn->request_method;
   const char *http_version = conn->http_version;
   const char *header = mg_get_header(conn, "Connection");
-  return 0;
   return method != NULL &&
     (!strcmp(method, "GET") || c->endpoint_type == EP_USER) &&
     ((header != NULL && !mg_strcasecmp(header, "keep-alive")) ||
@@ -4947,6 +4946,22 @@ static void set_default_option_values(char **opts) {
   }
 }
 
+static const char *add_listener(struct mg_server *server, char **v,
+                                const char *value) {
+  const char *error_msg = NULL;
+  struct ns_connection *c;
+
+  if ((c = ns_bind(&server->ns_mgr, value, mg_ev_handler, NULL)) == NULL) {
+    error_msg = "Cannot bind to port";
+  } else {
+    char buf[100];
+    ns_sock_to_str(c->sock, buf, sizeof(buf), 2);
+    free(*v);
+    *v = mg_strdup(buf);
+  }
+  return error_msg;
+}
+
 const char *mg_set_option(struct mg_server *server, const char *name,
                           const char *value) {
   int ind = get_option_index(name);
@@ -4973,14 +4988,9 @@ const char *mg_set_option(struct mg_server *server, const char *name,
   DBG(("%s [%s]", name, *v));
 
   if (ind == LISTENING_PORT) {
-    struct ns_connection *c = ns_bind(&server->ns_mgr, value, mg_ev_handler, NULL);
-    if (c == NULL) {
-      error_msg = "Cannot bind to port";
-    } else {
-      char buf[100];
-      ns_sock_to_str(c->sock, buf, sizeof(buf), 2);
-      free(*v);
-      *v = mg_strdup(buf);
+    struct vec vec;
+    while (!error_msg && (value = next_option(value, &vec, NULL)) != NULL) {
+      error_msg = add_listener(server, v, vec.ptr);
     }
 #ifndef MONGOOSE_NO_FILESYSTEM
   } else if (ind == HEXDUMP_FILE) {