class I2_BASE_API openssl_error : virtual public std::exception, virtual public boost::exception { };
struct errinfo_openssl_error_;
-typedef boost::error_info<struct errinfo_openssl_error_, int> errinfo_openssl_error;
+typedef boost::error_info<struct errinfo_openssl_error_, unsigned long> errinfo_openssl_error;
inline std::string to_string(const errinfo_openssl_error& e)
{
bool ApiClient::ProcessMessage(void)
{
- Dictionary::Ptr message = JsonRpc::ReadMessage(m_Stream);
+ Dictionary::Ptr message;
+
+ if (m_Stream->IsEof())
+ return false;
+
+ try {
+ message = JsonRpc::ReadMessage(m_Stream);
+ } catch (const openssl_error& ex) {
+ const unsigned long *pe = boost::get_error_info<errinfo_openssl_error>(ex);
+
+ if (pe && *pe == 0)
+ return false; /* Connection was closed cleanly */
+
+ throw;
+ }
if (!message)
return false;