2014-02-19 2 views
0

Я разрабатываю простой клиент ejabberd в C, используя libstrophe. Он подключается и начинает обрабатывать сообщения, как это должно быть сделано.Strophe Unrecoverable TLS error

Однако через некоторое время (после двух или трех пингов с сервера ejabberd) мое соединение закрывается, и статус установлен в DISCONNECTED. Ниже находится хвост отладочных линий:

xmpp DEBUG Unrecoverable TLS error, 5. 
xmpp DEBUG Closing socket. 
DEBUG: disconnected event DEBUG Stopping event loop. 
event DEBUG Event 
oop completed. 

Я инициализирую и подключаюсь, как показано ниже.

xmpp_initialize(); 

/* read connection params */ 
if(set_xmpp_conn_params(&conn_params) < 0) { 
    fprintf(stderr, "Could not retrieve connection params from %s\n", 
        SERVER_CONF_FILE); 
    return -1; 
} 

/* initialize the XMPP logger */ 
xmpp_log = xmpp_get_default_logger(XMPP_LOG_LEVEL); 
xmpp_ctx = xmpp_ctx_new(NULL, xmpp_log); 

/* create a connection */ 
xmpp_conn = xmpp_conn_new(xmpp_ctx); 

/* login */ 
xmpp_conn_set_jid(xmpp_conn, conn_params.jid); 
xmpp_conn_set_pass(xmpp_conn, conn_params.password); 

/* create a client */ 
xmpp_connect_client( xmpp_conn, conn_params.host, 0, 
         agent_conn_handler, xmpp_ctx); 

/* enter the event loop */ 
xmpp_run(xmpp_ctx); 

/* the code below is executed 
    whenever connection handler @agent_conn_handler exits */ 

/* release the connection and context */ 
xmpp_conn_release(xmpp_conn); 
xmpp_ctx_free(xmpp_ctx); 

Почему я получаю сообщение об ошибке TLS?

Спасибо.

+0

Вы используете openssl, gnutls или schannel для TLS? –

+0

Да, я использую 'openssl'. –

ответ

0

Ошибка 5 - это SSL_ERROR_SYSCALL. OpenSSL docs говорят:

Some I/O error occurred. The OpenSSL error queue may contain more information on the error. If the error queue is empty (i.e. ERR_get_error() returns 0), ret can be used to find out more about the error: If ret == 0, an EOF was observed that violates the protocol. If ret == -1, the underlying BIO reported an I/O error (for socket I/O on Unix systems, consult errno for details).

На практике это может означать, что сервер упал соединение по какой-либо причине. Я бы предложил сделать трассировку пакетов с WireShark, чтобы получить дополнительную информацию. Например, мы видели, как это происходит с серверами, использующими библиотеки RSA для TLS, когда клиент предлагает TLS версии 1.1.

+0

Когда я просматриваю Wireshark, перед отсоединением клиент сначала отправляет пакет '[FIN, ACK] ', а затем получает RST с сервера. Как вы решили свое дело? –

+0

Сервер посылает FIN до того, как клиент отправит FIN/ACK? Кроме того, декодируйте поток как SSL, и посмотрите, что такое последнее сообщение SSL. В том случае, когда мы видели, нам пришлось заставить клиентов использовать TLS 1.0, пока мы не заменили библиотеку RSA на сервере. –

+0

привет, я создаю приложение, использующее libstrophe в качестве клиента XMPP, у вас возникнет опыт относительно «Неустранимая ошибка TLS, 6.» ? –

Смежные вопросы