diff --git a/lib/core/connect.c b/lib/core/connect.c index 4de7dff4e..f1c6bf4b8 100644 --- a/lib/core/connect.c +++ b/lib/core/connect.c @@ -87,9 +87,12 @@ lws_client_connect_via_info(const struct lws_client_connect_info *i) wsi->pending_timeout = NO_PENDING_TIMEOUT; wsi->position_in_fds_table = LWS_NO_FDS_POS; wsi->c_port = i->port; - wsi->vhost = i->vhost; - if (!wsi->vhost) - wsi->vhost = i->context->vhost_list; + + wsi->vhost = NULL; + if (!i->vhost) + lws_vhost_bind_wsi(i->context->vhost_list, wsi); + else + lws_vhost_bind_wsi(i->vhost, wsi); if (!wsi->vhost) { lwsl_err("%s: No vhost in the context\n", __func__); @@ -97,8 +100,6 @@ lws_client_connect_via_info(const struct lws_client_connect_info *i) goto bail; } - lws_vhost_bind_wsi(wsi->vhost, wsi); - wsi->protocol = &wsi->vhost->protocols[0]; wsi->client_pipeline = !!(i->ssl_connection & LCCSCF_PIPELINE); diff --git a/lib/core/libwebsockets.c b/lib/core/libwebsockets.c index 404506f12..ffdcffc43 100644 --- a/lib/core/libwebsockets.c +++ b/lib/core/libwebsockets.c @@ -113,6 +113,8 @@ int lws_open(const char *__file, int __oflag, ...) void lws_vhost_bind_wsi(struct lws_vhost *vh, struct lws *wsi) { + if (wsi->vhost == vh) + return; wsi->vhost = vh; vh->count_bound_wsi++; lwsl_info("%s: vh %s: count_bound_wsi %d\n",