Всем доброго дня суток!Некоторое время назад я задавал здесь вопрос относительно проблем с буффером:
https://www.opennet.ru/openforum/vsluhforumID9/6096.html
Недавно я вернулся к этой программе и хотел добавить штамп сервера при получении сообщения с клиента. Проблема: в первых нескольких сотнях штемпелей происходит следующая ошибка:
Own Time Message Number Find Time
12:50:17.489863 1 12:50:17.454216
2 12:50:17.456216
3 12:50:17.456915
4 12:50:17.457540
5 12:50:17.458140
6 12:50:17.458759
7 12:50:17.459398
8 12:50:17.459988
9 12:50:17.460621
10 12:50:17.461203
11 12:50:17.461852
12 12:50:17.462485
13 12:50:17.463084
14 12:50:17.490240 12:50:17.463704
15 12:50:17.464311
12:50:17.491031 16 12:50:17.464819
17 12:50:17.465117
18 12:50:17.465380
Затем начинают приходить чёткие строки, но с ошибкой времени из за буфферизации(полагаю).
12:50:17.560627 360 12:50:17.560940
12:50:17.561645 361 12:50:17.561958
12:50:17.562664 362 12:50:17.562971
12:50:17.563677 363 12:50:17.563985
12:50:17.564690 364 12:50:17.565004
12:50:17.565779 365 12:50:17.566096
(здесь видно, что время прихода меньше времени отсылки)
Подскажите пожалуйста в чём заключается ошибка и как от неё избавиться.
полагаю для этого необходимо настроить буффер клиента на отсылку и буффер сервера на приём каждый раз лишь одной строчки. Я прав?
сервер:
gettimeofday( &tv, 0 );
actual_time = localtime( &(tv.tv_sec ) );
strftime( puffer, 17, "%H:%M:%S", localtime( &(tv.tv_sec ) ) );
length = recv(client_fd, buffer, sizeof(buffer)-1, 0);
if (length == 0)
{
printf("Connection closed by remote host.\n");
break;
}
buffer[length]='\0';
fprintf(log_file,"%s.%ld\t%s",puffer,tv.tv_usec,buffer);
клиент:
for(i=1; i<=10000;i++)
{
gettimeofday( &tv, 0 );
actual_time = localtime( &(tv.tv_sec ) );
strftime(vorbuffer,9, "%H:%M:%S", localtime( &(tv.tv_sec ) ) );
sprintf(buffer,"\t%d\t%s.ld\n\0",i,vorbuffer, tv.tv_usec);
length = strlen(buffer);
send(sock_fd, buffer, length, 0);
}