diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/sender.cc | 9 | ||||
| -rw-r--r-- | src/sender_client.cc | 8 |
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; |
