Я изменил функцию 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
?