]> granicus.if.org Git - icinga2/commitdiff
Clean up socket code.
authorGunnar Beutner <gunnar@beutner.name>
Fri, 18 Oct 2013 06:26:48 +0000 (08:26 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Fri, 18 Oct 2013 06:26:48 +0000 (08:26 +0200)
lib/base/bufferedstream.cpp
lib/base/networkstream.cpp
lib/base/socket.cpp
lib/base/socket.h

index 0e7c489310611c9969b60db2572a477b94c7c75e..8277e32c0817c2b0a6833528e42ebcda280b6b2b 100644 (file)
@@ -210,5 +210,5 @@ bool BufferedStream::IsEof(void) const
 {
        boost::mutex::scoped_lock lock(m_Mutex);
 
-       return m_Eof;
-}
\ No newline at end of file
+       return m_InnerStream->IsEof() && m_RecvQ->GetAvailableBytes() == 0;
+}
index 3263d459acfbddeeccd4a0bfa60cc0382ad28937..ea86ff2cdc0624f2ba9b367016a70d92383f71d2 100644 (file)
@@ -43,7 +43,15 @@ void NetworkStream::Close(void)
  */
 size_t NetworkStream::Read(void *buffer, size_t count)
 {
-       size_t rc = m_Socket->Read(buffer, count);
+       size_t rc;
+
+       try {
+               rc = m_Socket->Read(buffer, count);
+       } catch (...) {
+               m_Eof = true;
+
+               throw;
+       }
 
        if (rc == 0)
                m_Eof = true;
@@ -60,7 +68,16 @@ size_t NetworkStream::Read(void *buffer, size_t count)
  */
 void NetworkStream::Write(const void *buffer, size_t count)
 {
-       size_t rc = m_Socket->Write(buffer, count);
+       size_t rc;
+
+       try {
+               rc = m_Socket->Write(buffer, count);
+       } catch (...) {
+               m_Eof = true;
+
+               throw;
+       }
+
        if (rc < count)
                BOOST_THROW_EXCEPTION(std::runtime_error("Short write for socket."));
 }
index a5f1b06c09fa76895c2098ced7c8297a2e1ec79d..667cbfe99a7f95d50d61c6a244e6a69fcb200f5a 100644 (file)
@@ -62,8 +62,8 @@ Socket::~Socket(void)
 void Socket::SetFD(SOCKET fd)
 {
        if (fd != INVALID_SOCKET) {
-               /* mark the socket as close-on-exec */
 #ifndef _WIN32
+               /* mark the socket as close-on-exec */
                Utility::SetCloExec(fd);
 #endif /* _WIN32 */
        }
index b8506daa439e623eb7fae57762a07a1aee95041e..c7ab87a044142d577c18250292f13b05cfa77b21 100644 (file)
@@ -58,8 +58,6 @@ protected:
        void SetFD(SOCKET fd);
        SOCKET GetFD(void) const;
 
-       void SetConnected(bool connected);
-
        int GetError(void) const;
 
        mutable boost::mutex m_SocketMutex;