#include <assert.h>
#include <errno.h>
+#include <limits.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
+#include <sys/types.h>
#include <string>
#include <vector>
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;
}