Потеря пакета при слишком быстрой отправке на macos - PullRequest
0 голосов
/ 30 октября 2019

окружение: macbook pro, macOS Mojave 10.14.6

Я проверял пропускную способность ввода пакетов в беспроводную сеть.

Проблема заключается в том, что при отправке пакетов udp на мой маршрутизатор для100K раз в цикле, только около 16K фактически вводятся в сеть, но все 100K-вызовов к sendto возвращаются успешно.

char dbuf[1100] = "\0";
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
uint32_t ip_binary_net = inet_addr("192.168.0.1");
struct sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_port = htons(5577);
sa.sin_addr.s_addr = ip_binary_net;

for(int i = 0; i < 100000; i++){
    int send_num = sendto(sockfd, dbuf, 1000, 0, (struct sockaddr *)&sa, sizeof(sa));
    if(send_num != 1000)
        printf("send_num err!\n");
}

Моя программа показывает пропускную способность 2G Мбит / с, что абсолютно невозможно.

Я проверил сетевую утилиту, Wireshark на моем MacBook и маршрутизатор. Ясно, что только небольшая часть этих пакетов была фактически введена в сеть.

Я столкнулся с той же проблемой, используя libpcap. Но эта проблема не произошла на моей машине Windows. Это какая-то особенность ядра macOS?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...