summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sender.cc9
-rw-r--r--src/sender_client.cc8
2 files changed, 9 insertions, 8 deletions
diff --git a/src/sender.cc b/src/sender.cc
index c5b84c4..b9b6a36 100644
--- a/src/sender.cc
+++ b/src/sender.cc
@@ -40,7 +40,7 @@ void queue_message(const std::string& channel, const std::string& message);
class Client {
public:
Client(int sock)
- : sock_(sock), have_channel_(false), size_(0) {
+ : sock_(sock), fill_(0), have_channel_(false), size_(0) {
}
~Client() {
@@ -71,7 +71,7 @@ public:
if (size_ == 0) {
auto const avail = std::min(fill - pos,
static_cast<size_t>(4));
- memcpy(buf_ + fill_, buf, avail);
+ memcpy(buf_ + fill_, buf + pos, avail);
fill_ += avail;
pos += avail;
if (fill_ == 4) {
@@ -89,13 +89,14 @@ public:
pos += avail;
if (channel_.size() == size_) {
have_channel_ = true;
+ size_ = 0;
}
}
} else {
if (size_ == 0) {
auto const avail = std::min(fill - pos,
static_cast<size_t>(4));
- memcpy(buf_ + fill_, buf, avail);
+ memcpy(buf_ + fill_, buf + pos, avail);
fill_ += avail;
pos += avail;
if (fill_ == 4) {
@@ -109,7 +110,7 @@ public:
} else {
auto const avail = std::min(fill - pos,
size_ - message_.size());
- channel_.append(buf + pos, buf + pos + avail);
+ message_.append(buf + pos, buf + pos + avail);
pos += avail;
if (message_.size() == size_) {
send_message();
diff --git a/src/sender_client.cc b/src/sender_client.cc
index c6129e9..f954a5c 100644
--- a/src/sender_client.cc
+++ b/src/sender_client.cc
@@ -67,22 +67,22 @@ private:
}
} else if (pos < 4 + channel.size()) {
size_t const avail = 4 + channel.size() - pos;
- ret = write(sock_, channel.data() + (pos - 4), avail);
+ ret = write(sock_, channel.data() + pos - 4, avail);
if (ret > 0) {
pos += ret;
if (static_cast<size_t>(ret) == avail) continue;
}
} else if (pos < 8 + channel.size()) {
size_t const avail = 8 + channel.size() - pos;
- ret = write(sock_,
- reinterpret_cast<char*>(&size2) + pos, avail);
+ ret = write(sock_, reinterpret_cast<char*>(&size2)
+ + pos - 4 - channel.size(), avail);
if (ret > 0) {
pos += ret;
if (static_cast<size_t>(ret) == avail) continue;
}
} else {
size_t const avail = len - pos;
- ret = write(sock_, message.data() + (pos - 8 - channel.size()),
+ ret = write(sock_, message.data() + pos - 8 - channel.size(),
avail);
if (ret > 0) {
pos += ret;