cond = 0;
while (1) {
reread:
if (c->has_error) {
return 0; / has_error is set by disconnect(), return no error /
}
if (c->tls) {
ret = SSL_read(c->ssl, data, len);
if (ret < 0) {
ret = SSL_get_error(c->ssl, ret);
if (ret == SSL_ERROR_WANT_READ)
cond |= G_IO_IN;
if (ret == SSL_ERROR_WANT_WRITE)
cond |= G_IO_OUT;
if(ret == SSL_ERROR_SYSCALL){
g_socket_condition_wait(c->sock, G_IO_OUT | G_IO_ERROR | G_IO_HUP, NULL, NULL);
continue;//goto reread;//
}
ret = -1;
}else{
//MC_DEBUG("66666666666666666666666666666 ret == %d ::%x",ret,c->ssl);
}
}
if (ret == -1) {
if (cond != 0) {
g_socket_condition_wait(c->sock, G_IO_OUT | G_IO_ERROR | G_IO_HUP, NULL, NULL);
continue;//goto reread;//
} else {
c->has_error = TRUE;
return -errno;
}
}
break;
}
if (ret == 0) {
CHANNEL_DEBUG(channel, "Closing the connection: spice_channel_read() - ret=0");
c->has_error = TRUE;
return 0;
}
//MC_DEBUG("[123456] read_wire: ret = [%d] [%d]", ret, len);
return ret;
}
这是一个很全身疼的问题,在x86版本的spice-gtk代码中就没有这个ssl_read()的问题.
关于android版本spice协议tls端口链接方式的bug问题
原文:http://blog.51cto.com/11225159/2164980