--- a/libfreerdp-core/tls.c 2012-02-10 03:01:42.000000000 +0100 +++ b/libfreerdp-core/tls.c 2012-02-25 21:32:00.381001657 +0100 @@ -22,6 +22,9 @@ #include "tls.h" +#include +#include + boolean tls_connect(rdpTls* tls) { int connection_status; @@ -120,9 +123,18 @@ return true; } +char _buf_[8]; + boolean tls_disconnect(rdpTls* tls) { - SSL_shutdown(tls->ssl); + int n = read(tls->ssl->wbio->num,_buf_,0); + if (errno) { + fprintf(stderr,"WARNING: tls_disconnect(): the socket is already dead. Won't call SSL_shutdown(tls->ssl).\n"); + /*SSL_free(tls->ssl);*/ + } + else + SSL_shutdown(tls->ssl); + /*printf("DBG: tls_disconnect(): call SSL_shutdown(tls->ssl) tls->ssl->{rbio,wbio}->num: %d,%d SSL_get_rfd/wfd: %d,%d\n",tls->ssl->rbio->num,tls->ssl->wbio->num,SSL_get_rfd(tls->ssl),SSL_get_wfd(tls->ssl));*/ return true; }