Strophe不可恢复的TLS错误

时间:2014-02-19 09:21:01

标签: ssl xmpp ejabberd libstrophe

我正在使用libstrophe在C中开发一个简单的ejabberd客户端。它连接并开始处理消息,因为它应该这样做。

但是,过了一段时间(从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错误消息?

感谢。

1 个答案:

答案 0 :(得分:0)

错误5是SSL_ERROR_SYSCALL。 OpenSSL docs说:

  

发生了一些I / O错误。 OpenSSL错误队列可能包含更多   有关错误的信息。如果错误队列为空(即   ERR_get_error()返回0),ret可以用来查找更多关于   错误:如果ret == 0,则观察到违反协议的EOF。如果   ret == -1,底层BIO报告了I / O错误(对于socket I / O on   Unix系统,详情请咨询errno。

实际上,这可能意味着服务器出于某种原因丢弃了您的连接。我建议使用WireShark进行数据包跟踪以获取更多信息。例如,当客户端提供TLS版本1.1时,我们已经看到使用RSA库进行TLS的服务器会发生这种情况。