Почему я продолжаю получать ошибки ENOBUFS в моей программе nfqueue, даже если мой буфер достаточно велик?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему я продолжаю получать ошибки ENOBUFS в моей программе nfqueue, даже если мой буфер достаточно велик?

Сообщение Anonymous »

Я пишу простой преобразователь сетевых пакетов на C++, который меняет только значение TTL (на данный момент). Основной цикл получает запросы из очереди netfilter с помощью Recv(fd, buf, sizeof(buf), 0), а затем обрабатывает эти запросы с помощью nfq_handle_packet(h, buf, rv). Размер буфера составляет 500000000 байт, что составляет около 500 мегабайт или 4000 мегабит. Скорость интернета далеко не близка к 4 гигабитам (и даже если бы она была 4 гигабита, я не передаю столько данных), но функция Recv продолжает получать ENOBUFS («Нет буфера доступное пространство» при форматировании с помощью strerror), когда я, например, запускаю тест скорости на сайтеspeed.cloudflare.com. Я не понимаю, как мне здесь не хватает буферного пространства. Код, который получает запросы:
// created before in the code: char buf[500000000] = {0};
fd = nfq_fd(h);
while (true) {
rv = recv(fd, buf, sizeof(buf), 0);
if (rv < 0) {
std::cout packetsRejected += 1;
return result;
}
uint8_t ipVersion = (packetData[0] & 0b11110000) >> 4;
if (ipVersion == 4) {
uint8_t headerLength = packetData[0] & 0b1111;
if (headerLength < 5 || headerLength > 15) {
int result = nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);
data->packetsRejected += 1;
data->bytesRejected += length;
return result;
}
headerLength *= 4;
packetData[8] = 64;
fixIPv4Checksum(packetData, headerLength);
}
int result = nfq_set_verdict(qh, id, NF_ACCEPT, length, packetData);
data->packetsAccepted += 1;
data->bytesAccepted += length;
return result;
}


Подробнее здесь: https://stackoverflow.com/questions/789 ... hen-my-buf
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»