2014-02-19 105 views
0

我正在用C開發一個簡單的ejabberd客戶端,使用libstrophe。它連接並開始處理消息,因爲它應該這樣做。Strophe不可恢復的TLS錯誤

但是,經過一段時間(ejabberd服務器的兩三次ping後),我的連接關閉並且狀態設置爲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

你對TLS使用openssl,gnutls或schannel嗎? –

+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做一個包跟蹤以獲取更多信息。例如,當客戶端提供TLS版本1.1時,我們發現使用RSA庫的服務器發生了這種情況。

+0

當我查看Wireshark時,在斷開連接之前,客戶端首先發送一個'[FIN,ACK]'數據包,然後從服務器接收RST。你是如何解決你的案子的? –

+0

服務器在客戶端發送FIN/ACK之前是否發送FIN?另外,將流解碼爲SSL,並查看最新的SSL消息是什麼。在我們看到的情況下,我們必須強制客戶端使用TLS 1.0,直到我們替換了服務器上的RSA庫。 –

+0

嗨,我是使用libstrophe創建一個應用程序作爲XMPP客戶端,你會碰巧有關於「不可恢復的TLS錯誤,6」的經驗。 ? –