Здравствуйте, steppe_wolf, Вы писали:
_>здравтвуйте, данный вопрос уже подымался в форуме, но к сожалению мне это не помогло пока.
_>Необходимо в клиент серверное приложение внедрить поддержку ssl. Пытаюсь адаптировать под свои нужды
_>пример из openssl-0.9.7i.tar.gz, до вызова SSL_accept отрабатывает вроде все нормально, подскажите пожайлуста
_>в чем я протупил, где ошибся?, зарание благодарен.
_>#include "winsock2.h"
_>#include <openssl/bio.h>
_>#include <openssl/ssl.h>
_>#include <openssl/err.h>
_> SSL_METHOD *sm = NULL;
_> SSL_load_error_strings();
_> SSL_library_init();
_> SSL_CTX *ctx = SSL_CTX_new( sm );
_> ctx = SSL_CTX_new( SSLv23_server_method() );
_> SSL_CTX_use_certificate_file( ctx, "server.pem", SSL_FILETYPE_PEM ) != 1 )
_> SSL_CTX_set_default_passwd_cb( ctx, password_cb );
_> SSL_CTX_use_PrivateKey_file( ctx, "server.pem", SSL_FILETYPE_PEM );
_> SSL_CTX_check_private_key( ctx )ж
_> WSADATA wsaData;
_> WSAStartup( MAKEWORD(1, 1), &wsaData );
_> sockaddr_in _sin;
_> _sin.sin_family = AF_INET;
_> _sin.sin_port = 0;
_> _sin.sin_addr.s_addr = 0;
_> sockaddr_in sin;
_> sin.sin_family = AF_INET;
_> sin.sin_port = htons( 443 );
_> sin.sin_addr.s_addr = htonl( INADDR_ANY );
_> BOOL b = TRUE;
_> DWORD arg = 0;
_> SOCKET mainsock = socket( AF_INET, 1, 0 );
_> setsockopt( mainsock, IPPROTO_TCP, TCP_NODELAY, (char*)&b, sizeof(BOOL) );
_> ioctlsocket( mainsock, FIONBIO, &arg );
_> bind( mainsock, (struct sockaddr*)&sin, sizeof( sin ) );
_> listen( mainsock, SOMAXCONN );
_> int nLengthAddr = sizeof(SOCKADDR);
_> int clisock = accept( mainsock,(struct sockaddr*)&_sin, &nLengthAddr );
_> //SOCKET clisock = accept( mainsock,(struct sockaddr*)&_sin, &nLengthAddr );
_>/// 1 --------------------------------------------
_> BIO *conn = BIO_new( BIO_s_socket() );
_> BIO_set_fd( conn, clisock, BIO_NOCLOSE );
_> SSL *ssl = SSL_new( ctx );
_> SSL_set_bio( ssl, conn, conn );
_> if( SSL_accept( ssl ) <= 0 )
_> {
_> printf( "\nSSL_accept error..." ); /// !!!! тут Error
_> return FALSE;
_> }
_>/// --------------------------------------------
_> ИЛИ
_>/// 2 --------------------------------------------
_> SSL_set_fd( ssl, clisock );
_> int err = SSL_accept( ssl );
_> if( err <= 0 ) /// !!!! тут Error
_> printf("\nzaebalo");
_>/// --------------------------------------------
Вопрос снимается, проблему вроде решил,
всем спасибо