Re: опять openssl
От: steppe_wolf  
Дата: 26.10.05 06:57
Оценка:
Здравствуйте, 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");
_>/// --------------------------------------------


Вопрос снимается, проблему вроде решил,
всем спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.