+ rv = ServerInstance->SE->Send(this, front.data(), itemlen, 0);
+ if (rv == 0)
+ {
+ SetError("Connection closed");
+ return;
+ }
+ else if (rv < 0)
+ {
+ if (errno == EAGAIN || errno == EINTR)
+ ServerInstance->SE->ChangeEventMask(this, FD_WANT_FAST_WRITE | FD_WRITE_WILL_BLOCK);
+ else
+ SetError(strerror(errno));
+ return;
+ }
+ else if (rv < itemlen)
+ {
+ ServerInstance->SE->ChangeEventMask(this, FD_WANT_FAST_WRITE | FD_WRITE_WILL_BLOCK);
+ front = front.substr(itemlen - rv);
+ sendq_len -= rv;
+ return;
+ }
+ else
+ {
+ sendq_len -= itemlen;
+ sendq.pop_front();
+ if (sendq.empty())
+ ServerInstance->SE->ChangeEventMask(this, FD_WANT_EDGE_WRITE);
+ }