Вот уже около шести месяцев я управляю серией libwebsockets
клиентов, которые подключаются к различным сервисам. Все работает относительно гладко.
Я выполняю libwebsockets
на коммите git в строке 2.x между официальными выпусками: afafc13
.
Следующая настройка более или менее соответствует спецификациям для различных сервисов и работает с моей сборкой libwebsockets v2.x:
struct lws_client_connect_info i
bzero(&i, sizeof (struct lws_client_connect_info));
i.protocol = "wss";
i.address = "ws.myservice.com
i.host = i.address;
i.port = 443;
i.path = "/";
i.ssl_connection = LCCSCF_ALLOW_SELFSIGNED;
i.protocol = protocols[0].name;
Однако, когда я строю на ветке v3.1-stable
libwebsockets
, никто из моих клиентов не подключается к его сервису, всегда ссылаясь на ошибку HTTP «upgrade»:
LLL_WARN: lws_client_handshake: got bad HTTP response '400'
LLL_INFO: closing connection (prot MyClient) due to bail2 connection error: HS: ws upgrade response not 101
Когда я меняю номер порта на 80
i.port = 80;
затем некоторые моих клиентов подключаются, по-видимому, успешно "обновляя" HTTP-соединение до WS. Но другие не подключаются, и сообщение об ошибке не выдается.
Ни в коем случае я не могу использовать сборку 3.1-stable
libwebsockets
для подключения к службе с использованием моей существующей настройки lws_client_connect_info
, и во всех случаях эта существующая установка соответствует различным спецификациям, указанным соответствующими службами.
Я не знаком со стандартом WebSockets
, и поэтому вполне возможно, что мне не хватает чего-то технического. Но все же кажется, что я должен быть в состоянии подключиться к службе, используя ее заданную конфигурацию и любую недавнюю сборку libwebsockets
.
Что мне не хватает?