]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Socket.hh
better socket sending/receiving
[chaz/yoink] / src / Moof / Socket.hh
index 9690a2e892df42cdc59257ec270083d9f8cb98d3..c53ca06289974869f8d1b31fe438605aea827835 100644 (file)
@@ -254,6 +254,7 @@ public:
 
        Socket(const SocketAddress& address) :
                mFd(-1),
+               mIsConnected(false),
                mAddress(address)
        {
                mFd = socket(address.family(), address.type(), 0);
@@ -271,7 +272,7 @@ public:
 
        bool isConnected() const
        {
-               return mFd != -1;
+               return mIsConnected;
        }
 
        const SocketAddress& address() const
@@ -282,7 +283,9 @@ public:
 
        int connect()
        {
-               return ::connect(mFd, mAddress.address(), mAddress.size());
+               int result = ::connect(mFd, mAddress.address(), mAddress.size());
+               mIsConnected = result != -1;
+               return result;
        }
 
        int bind()
@@ -318,7 +321,7 @@ public:
        int set(int option, const std::string& value)
        {
                return setsockopt(mFd, SOL_SOCKET, option,
-                               value.c_str(), value.length());
+                               value.data(), value.length());
        }
 
        int get(int option, int& value)
@@ -345,26 +348,35 @@ public:
                return result;
        }
 
-       void write(const Packet& packet)
+
+       ssize_t write(const void* bytes, size_t size)
        {
-               write(mAddress, packet);
+               return send(mFd, bytes, size, 0);
+       }
+       ssize_t write(const void* bytes, size_t size,
+               const SocketAddress& address)
+       {
+               return sendto(mFd, bytes, size, 0,
+                       address.address(), address.size());
        }
 
-       void write(const SocketAddress& address, const Packet& packet)
+       ssize_t write(const Packet& packet)
        {
-               sendto(mFd, packet.bytes(), packet.size(), 0,
-                               address.address(), address.size());
+               return write(packet.bytes(), packet.size());
        }
 
-       Packet read()
+       ssize_t write(const Packet& packet, const SocketAddress& address)
        {
-               char buffer[1024];
-               int size = recv(mFd, buffer, sizeof(buffer), 0);
+               return write(packet.bytes(), packet.size(), address);
+       }
 
-               return Packet(buffer, size);
+
+       ssize_t read(void* bytes, size_t size)
+       {
+               return recv(mFd, bytes, size, 0);
        }
 
-       Packet read(SocketAddress& address)
+       ssize_t read(void* bytes, size_t size, SocketAddress& address)
        {
                union
                {
@@ -373,12 +385,28 @@ public:
                } addr;
                socklen_t length = sizeof(addr);
 
-               char buffer[1024];
-               int size = recvfrom(mFd, buffer, sizeof(buffer), 0,
-                               &addr.sa, &length);
+               ssize_t result = recvfrom(mFd, bytes, size, 0, &addr.sa, &length);
+               if (result != -1)
+               {
+                       address = SocketAddress(&addr.sa, length, mAddress.type());
+               }
+               return result;
+       }
+
+       ssize_t read(Packet& packet)
+       {
+               char buffer[65536];
+               ssize_t result = read(buffer, sizeof(buffer));
+               if (result != -1) packet = Packet(buffer, result);
+               return result;
+       }
 
-               address = SocketAddress(&addr.sa, length, mAddress.type());
-               return Packet(buffer, size);
+       ssize_t read(Packet& packet, SocketAddress& address)
+       {
+               char buffer[65536];
+               ssize_t result = read(buffer, sizeof(buffer), address);
+               if (result != -1) packet = Packet(buffer, result);
+               return result;
        }
 
 
@@ -400,6 +428,7 @@ private:
 
 
        int                             mFd;
+       bool                    mIsConnected;
        SocketAddress   mAddress;
 };
 
This page took 0.025861 seconds and 4 git commands to generate.