Я изменил функцию handle_send_to из Пример BOOST ASIO , чтобы он выглядел следующим образом -
{
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) в порядке с ресурсами - я не вижу насыщения процессора, памяти или сети.
Вывод 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
?