Scheduler: Restructure signal blocking/unblocking
[senf.git] / Socket / ClientSocketHandle.ct
index 2678fa6..c6fa8fd 100644 (file)
@@ -28,6 +28,7 @@
 
 // Custom includes
 #include <algorithm>
+#include <boost/utility/value_init.hpp>
 #include "../Utils/Buffer.hh"
 
 #define prefix_
@@ -97,7 +98,7 @@ template <class SPolicy>
 prefix_ std::string senf::ClientSocketHandle<SPolicy>::read(unsigned limit)
 {
     std::string rv;
-    this->read(rv,limit);
+    this->read(rv, limit);
     return rv;
 }
 
@@ -105,10 +106,9 @@ template <class SPolicy>
 template <class Sequence>
 prefix_ void senf::ClientSocketHandle<SPolicy>::read(Sequence & container, unsigned limit)
 {
-    unsigned nread (available());
-    if (limit>0 && nread>limit)
-        nread = limit;
-    container.resize(nread);
+    if (limit == 0) 
+        limit = available();
+    container.resize(limit);
     container.erase(read( std::make_pair(container.begin(), container.end()) ), 
                     container.end());
 }
@@ -120,9 +120,9 @@ prefix_ std::pair<std::string, typename SPolicy::AddressingPolicy::Address>
 senf::ClientSocketHandle<SPolicy>::readfrom(unsigned limit)
 {
     std::string rv;
-    typename SPolicy::AddressingPolicy::Address addr;
-    this->readfrom(rv,addr,limit);
-    return std::make_pair(rv,addr);
+    boost::value_initialized<typename SPolicy::AddressingPolicy::Address> addr;
+    this->readfrom(rv, addr.data(), limit);
+    return std::make_pair(rv, addr.data());
 }
 
 template <class SPolicy>