Для вашей справки (поскольку я упоминаю библиотечные функции ниже), документацию по libwebsockets можно найти здесь: https://github.com/warmcat/libwebsockets/blob/master/libwebsockets-api-doc.html#L466
Сайт можно найти здесь: http://libwebsockets.org/trac/libwebsockets
Моя проблема заключается в том, что если я передам 1 или 2 для параметра ssl_connection функции libwebsocket_client_connect (), я получу ошибку segfault.
Мой код написан на с ++.
Желая узнать, где это происходит, я запустил свой код в gdb (после добавления флага -g). После segfault я побежал обратно. Вот что я получил:
0x00007ffff7748c43 в SSL_ctrl () из /lib/x86_64-linux-gnu/libssl.so.1.0.0
(GDB) Backtrace
0 0x00007ffff7748c43 в SSL_ctrl () из /lib/x86_64-linux-gnu/libssl.so.1.0.0
1 0x00007ffff7503aa2 в lws_client_socket_service () из /usr/local/lib/libwebsockets.so.5.0.0
2 0x00007ffff74fe606 в libwebsocket_service_fd () из /usr/local/lib/libwebsockets.so.5.0.0
3 0x00007ffff7504029 в libwebsocket_client_connect_2 () из /usr/local/lib/libwebsockets.so.5.0.0
4 0x00007ffff75037d5 в lws_client_socket_service () из /usr/local/lib/libwebsockets.so.5.0.0
5 0x00007ffff74fe606 в libwebsocket_service_fd () из /usr/local/lib/libwebsockets.so.5.0.0
6 0x00007ffff7505980 в lws_plat_service () из /usr/local/lib/libwebsockets.so.5.0.0
Там больше, но уместная информация выше …
Как можно видеть выше, segfault происходит в функции SSL_ctrl ().
Если кто-то получил ошибку в функции libwebsockets SSL_ctrl () и решил ее, пожалуйста, дайте мне знать.
Если кто-нибудь может сказать мне, как собрать libwebsockets (используя make, cmake или другим способом) с флагами отладки и / или сделать так, чтобы он подробно записывал в какой-нибудь файл журнала и / или сделать так, чтобы я мог войти в функции с помощью gdb, Я был бы очень признателен!
Чтобы создать libwebsockets с параметрами DEBUG, используйте аргумент -DCMAKE_BUILD_TYPE = DEBUG с Cmake.
Убедитесь, что все более ранние версии libwebsockets.h (созданные с помощью параметра -DCMAKE_BUILD_TYPE = DEBUG) удалены, и выполните чистую сборку с включенным аргументом -DCMAKE_BUILD_TYPE = DEBUG.
После этого для включения отладки во время выполнения используйте параметр -d, установленный на уровне журнала.
если мой исполняемый файл — sock, то для включения журнала отладки во время использования используйте
./sock 127.0.0.1 -p 9000 -d 65535
что даст вывод как
[1449754712:6654] CLIENT: lws_client_connect: direct conn
[1449754712:6654] CLIENT: lws_client_connect_2
[1449754712:6654] CLIENT: lws_client_connect_2: address 127.0.0.1
Reason :35
Reason :32
Reason :36
[1449754712:6655] CLIENT: nonblocking connect retry