}
-int SimpleMessenger::Pipe::do_sendmsg(int sd, struct msghdr *msg, int len)
+int SimpleMessenger::Pipe::do_sendmsg(int sd, struct msghdr *msg, int len, bool more)
{
while (len > 0) {
if (0) { // sanity
assert(l == len);
}
- int r = ::sendmsg(sd, msg, 0);
+ int r = ::sendmsg(sd, msg, more ? MSG_MORE : 0);
if (r == 0)
dout(10) << "do_sendmsg hmm do_sendmsg got r==0!" << dendl;
if (r < 0) {
msg.msg_iov = msgvec;
msg.msg_iovlen = 2;
- if (do_sendmsg(sd, &msg, 1 + sizeof(s)) < 0)
+ if (do_sendmsg(sd, &msg, 1 + sizeof(s), true) < 0)
return -1;
return 0;
}
<< dendl;
if (msg.msg_iovlen >= IOV_MAX-2) {
- if (do_sendmsg(sd, &msg, msglen))
+ if (do_sendmsg(sd, &msg, msglen, true))
return -1;
// and restart the iov
Message *read_message();
int write_message(Message *m);
- int do_sendmsg(int sd, struct msghdr *msg, int len);
+ int do_sendmsg(int sd, struct msghdr *msg, int len, bool more=false);
int write_ack(__u64 s);
int write_keepalive();