#include <assert.h>
#include <errno.h>
+#include <limits.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
vector<iovec> collect_iovecs(const vector<iovec> &data, size_t bytes_wanted)
{
vector<iovec> ret;
- for (size_t i = 0; i < data.size() && bytes_wanted > 0; ++i) {
+ size_t max_iovecs = std::min<size_t>(data.size(), IOV_MAX);
+ for (size_t i = 0; i < max_iovecs && bytes_wanted > 0; ++i) {
if (data[i].iov_len <= bytes_wanted) {
// Consume the entire iovec.
ret.push_back(data[i]);
} while (ret == -1 && errno == EINTR);
if (ret == -1) {
- log_perror("pwrite");
+ log_perror("pwritev");
// Dazed and confused, but trying to continue...
return;
}
queued_data.push_back(iov);
} else {
- assert(encoding == Stream::STREAM_ENCODING_RAW);
+ assert(false);
}
}