diff --git a/src/box/iproto.cc b/src/box/iproto.cc
index 8e9b69490eee92778ad19a8bb77178c7b09efc7f..0cdb34e22f541bc2b14b96c9bebdca7e5027e1a3 100644
--- a/src/box/iproto.cc
+++ b/src/box/iproto.cc
@@ -577,10 +577,12 @@ iproto_flush(struct iobuf *iobuf, struct iproto_connection *con)
 			}
 			return 0;
 		}
-		size_t iov_len = 0;
+		size_t offset = 0;
+		int advance = 0;
+		advance = sio_move_iov(iov, nwr, &offset);
 		begin->used += nwr;             /* advance write position */
-		begin->pos += sio_move_iov(iov, nwr, &iov_len);
-		begin->iov_len = iov_len;
+		begin->iov_len = advance == 0 ? begin->iov_len + offset: offset;
+		begin->pos += advance;
 		assert(begin->pos <= end->pos);
 	}
 	return -1;