我正在使用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错误消息?
感谢。
答案 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的服务器会发生这种情况。