[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