我修改的BOOST ASIO example handle_send_to功能看起來像這 -升壓ASIO丟棄UDP數據包
{
ctr++;
cout<<"Counter: "<<ctr<<" data= "<<data<<endl;
socket_.async_receive_from(boost::asio::buffer(data_, max_length), sender_endpoint_,boost::bind(&server::handle_receive_from, this,boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred));
}
的目的是從根本上增加計數器每次UDP連接進行處理。
測試客戶端就像這 -
for(;;){
ctr++;
printf("ctr= %lu\n",ctr);
snprintf(buf2, 10,"%lu",ctr);
if ((numbytes = sendto(sockfd, buf2, strlen(buf2), 0,p->ai_addr, p->ai_addrlen)) == -1)
{
perror("client: sendto");
exit(1);
}
}
發送數據運行測試客戶端後,我看到在服務器端:
Counter= 358239 data= 369880
數據部分顯示了消息#。測試客戶端確實已發送369880條消息,但正如您所看到的,計數器只有358239條(丟失11641條消息)。
這裏可能有什麼問題?
兩臺主機(發送者和接收者,運行Ubuntu 10.04 LTS)都可以使用資源 - 我沒有看到CPU,內存或網絡飽和。
的netstat -su
輸出看起來喜歡 -
Udp:
38569571 packets received
1003583 packets to unknown port received.
74619 packet receive errors
267 packets sent
RcvbufErrors: 74619
如何解決大量packets to unknown port received
?