SSL Socket в Windows. Библиотека? Синхронный / асинхронный? Потоки? - PullRequest
3 голосов
/ 16 декабря 2008

У меня есть приложение с 2 потоками. Один поток GUI и один рабочий поток (CWinThread), в котором я выполняю трудоемкие операции - вычисления и HTTP-коммуникацию.

Я должен переключиться с HTTP на соединение через сокет SSL. Мне также нужно сделать проверку сертификата сервера (является ли он доверенным, срок его действия истек, отменен ли он )

  1. Какую библиотеку использовать для сокета SSL (MFC, Boost или что-то еще)?

  2. Нужно ли использовать синхронные или асинхронные операции? Я думаю, что если я использую асинхронные операции, я могу реализовать функцию отмены, которая может быть вызвана из потока GUI.

  3. А если я использую асинхронные операции, лучше ли перемещать операции с сокетами в первом потоке?

  4. Поддерживает ли протокол SSL сжатие потоковых данных?

Ответы [ 3 ]

2 голосов
/ 16 декабря 2008

Для поддержки SSL - взгляните на openssl.org

Отменить поддержку приятно; чтобы сделать это, вы должны регулярно проверять из рабочего потока, была ли отменена просьба. Обратите внимание на использование переменной volatile или защищенный доступ к ней с помощью критического раздела. Не выполняйте сетевую операцию из потока GUI, даже если он асинхронный. Хорошей политикой является не делать никаких операций ввода-вывода из потока графического интерфейса, чтобы убедиться, что он отзывчив и важнее, чтобы он не зависал.

1 голос
/ 16 декабря 2008

+ 1 для OpenSSL.org

Я писал об интеграции OpenSSL с асинхронными оконными сокетами в "Windows Developer Magazine" еще в 2002 году, и эту статью можно найти здесь: http://www.serverframework.com/asynchronousevents/2010/10/using-openssl-with-asynchronous-sockets.html, которая включает исходный код для простого клиента MFC, использующего OpenSSL.

0 голосов
/ 16 декабря 2008

Существует еще одна бесплатная библиотека, SOcketPro, доступная здесь:

http://www.udaparts.com/document/articles/demome.htm

Rgds, moster67

...