From ddea0ce92bad7e218be9ac46f76ff2c34fd43a15 Mon Sep 17 00:00:00 2001 From: Timo Weingärtner Date: Thu, 10 May 2018 17:50:04 +0200 Subject: Partially revert "(re)unify client iostreams" This partially reverts commit a42c87e6a761a56ebc63cd7728fa2126b2e8805f. --- ssh-agent-filter.C | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ssh-agent-filter.C b/ssh-agent-filter.C index 74b15ab..307be1f 100644 --- a/ssh-agent-filter.C +++ b/ssh-agent-filter.C @@ -567,11 +567,15 @@ void handle_client (int const sock) try { if (fcntl(sock, F_SETFL, fcntl(sock, F_GETFL) & ~O_NONBLOCK)) throw system_error(errno, system_category(), "fcntl"); - io::stream client{sock, io::close_handle}; - arm(client); + // we could use only one streambuf and iostream but when + // switching from read to write an lseek call is made that + // fails with ESPIPE and causes an exception + io::stream client_in{sock, io::close_handle}; + io::stream client_out{sock, io::never_close_handle}; + arm(client_out); for (;;) - client << handle_request(rfc4251::string{client}) << flush; + client_out << handle_request(rfc4251::string{client_in}) << flush; } catch (...) { } -- cgit v1.2.3