[Comm] [p6] тестирование новых freerdp и remmina

vx8400 vx8400 на gmail.com
Вс Фев 26 17:21:59 MSK 2012


26 февраля 2012 г. 9:40  Sergey Vlasov <vsu на altlinux.ru>:
> On Sat, Feb 25, 2012 at 10:36:49PM +0100, vx8400 wrote:
>> Собранный из trunk вываливается с той же ошибкой.
>> Причина в том, что при завершении сессии сервер нештатно разрывает
>> соединение.
>> xfreerdp видит, что сокет потерян (Failed to check FreeRDP file descriptor),
>> но все равно вызывает freerdp_disconnect() -> transport_disconnect() ->
>> -> tls_disconnect() -> SSL_shutdown(tls->ssl) -> ...
>> ... -> write(дохлый сокет ...) -> SIGPIPE
>>
>> Eсли не вызывать SSL_shutdown() при отвалившемся соединении, то
>> xfreerdp завершается нормально.

Спасибо за замечание по read/errno. Проверка делалась для конкретного
случая, чтобы дать remmina дойти до своей ошибки в glib/gtk.
Чтобы не морочиться с read(tls->ssl-> ...) и errno:

boolean tls_disconnect(rdpTls* tls)
{
uint8 _buf_[8];
 if (tls_read(tls,_buf_,0) < 0)
    fprintf(stderr,"ERROR: connection is already dead, won't call
SSL_shutdown(), returning true despite this\n");
 else
    SSL_shutdown(tls->ssl);
 return true;
}

> Хотя в любом случае всё это не поможет, поскольку закрытие соединения
> со стороны сервера может произойти после проверки, но перед вызовом
> SSL_shutdown().  Единственный надёжный способ борьбы с проблемой -
> игнорировать сигнал SIGPIPE и обрабатывать ошибку EPIPE от write();
> странно, почему xfreerdp этого не делает.

Почему сам SSL_shutdown() не проверяет соединение перед записью в
сокет и доводит до SIGPIPE?

remmina посмотрю еще.

wbr,
Oleg.


Подробная информация о списке рассылки community