在macos上发送速度过快时数据包丢失

在macos上发送速度过快时数据包丢失,c,macos,sockets,C,Macos,Sockets,环境: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

环境: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");
}
char dbuf[1100]=“0”;
int sockfd=套接字(AF_INET,SOCK_DGRAM,0);
uint32_t ip_binary_net=inet_addr(“192.168.0.1”);
sa中的结构sockaddr_;
sa.sin_family=AF_INET;
sa.sin_港=htons(5577);
sa.sin_addr.s_addr=ip_二进制网络;
对于(int i=0;i<100000;i++){
int send_num=sendto(sockfd,dbuf,1000,0,(struct sockaddr*)和sa,sizeof(sa));
如果(发送数量!=1000)
printf(“发送错误数量!\n”);
}
我的程序显示吞吐量是2GMbps,这是绝对不可能的

我检查了网络实用程序、macbook上的wireshark和路由器。很明显,这些数据包中只有一小部分被注入了网络

我在使用libpcap时遇到了同样的问题。 但是这个问题没有发生在我的windows机器上。
这是macOS内核的一些功能吗?

您如何知道它们成功返回?返回值“sendto”只是为了更好地分析:在每个数据包中放置一个索引,并查看缺少哪些数据包的接收端。我为每个数据包编制了索引。第一个数据包丢失发生在882号,wireshark捕获的下一个数据包是1198号。这种情况每隔几百包就发生一次。我想内核的缓冲区可能是原因,但我不确定。你认为UDP应该做什么?