]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Socket.hh
tcp socket disconnecting by remote
[chaz/yoink] / src / Moof / Socket.hh
index a4cb310b3403b4183562354dedbc54d56ab24738..17e841cca87ba4170b82637fe0dd53aecb349581 100644 (file)
@@ -729,11 +729,13 @@ public:
         * \param flags The send options.
         * \return The number of bytes written.
         */
-       ssize_t write(const void* bytes, size_t size,
-               const SocketAddress& address, int flags = 0)
+       ssize_t write(const void* bytes,
+                                 size_t size,
+                                 const SocketAddress& address,
+                                 int flags = 0)
        {
                return sendto(mImpl.fd, bytes, size, flags,
-                       address.address(), address.size());
+                                         address.address(), address.size());
        }
 
        /**
@@ -755,8 +757,9 @@ public:
         * \param flags The send options.
         * \return The number of bytes written.
         */
-       ssize_t write(const Packet& packet, const SocketAddress& address,
-                       int flags = 0)
+       ssize_t write(const Packet& packet,
+                                 const SocketAddress& address,
+                                 int flags = 0)
        {
                return write(packet.bytes(), packet.size(), address, flags);
        }
@@ -771,7 +774,9 @@ public:
         */
        ssize_t read(void* bytes, size_t size, int flags = 0)
        {
-               return recv(mImpl.fd, bytes, size, flags);
+               ssize_t result = recv(mImpl.fd, bytes, size, flags);
+               if (result == 0) mImpl.isConnected = false;
+               return result;
        }
 
        /**
@@ -783,8 +788,10 @@ public:
         * \param flags The recv options.
         * \return The number of bytes read.
         */
-       ssize_t read(void* bytes, size_t size, SocketAddress& address,
-                       int flags = 0)
+       ssize_t read(void* bytes,
+                                size_t size,
+                                SocketAddress& address,
+                                int flags = 0)
        {
                union
                {
@@ -799,6 +806,10 @@ public:
                {
                        address = SocketAddress(&addr.sa, length, mImpl.address.type());
                }
+               else if (result == 0)
+               {
+                       mImpl.isConnected = false;
+               }
                return result;
        }
 
This page took 0.017832 seconds and 4 git commands to generate.