【发布时间】:2012-01-12 20:36:42
【问题描述】:
我已将BOOST ASIO example 的handle_send_to 函数修改为如下所示-
{
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 问题?
【问题讨论】:
标签: sockets networking boost network-programming boost-asio