Что хочу: после посылки сообщения, если в течении 3 секунд не пришел обратное сообщение(ACK) от сервера(что мессадж получен), то послать еще раз первое сообщение, если второй раз не будет ответа от сервера - написать до свидания, закрыть сокет и выдти.
Где то туплю не могу понять.
Код: Выделить всё
char testmsg[] = "hello moto";
/* send a message to the server PORT on machine HOST */
if (send(sd, testmsg, sizeof(testmsg), 0) == -1) {
perror("send");
exit(1);
}
fd_set readFd;
struct timeval timeout;
timeout.tv_sec = 3;
timeout.tv_usec = 0;
do
{
FD_ZERO(&readFd);
FD_SET(sd, &readFd);
select(255,&readFd, NULL, NULL, &timeout);
if ( FD_ISSET(sd, &readFd)==1)
{
char echobuf[4096];
n = recv(sd, echobuf, sizeof(echobuf),0);
if (n>0)
{
printf("echo buf is: %s\n",echobuf);
}
}
else
{
printf("Sending second time...\n");
if (send(sd, testmsg, sizeof(testmsg), 0) == -1)
{
perror("send");
exit(1);
}
if ( FD_ISSET(sd, &readFd)==1)
{
char echobuf[4096];
n = recv(sd, echobuf, sizeof(echobuf),0);
if (n>0)
{
printf("echo buf is: %s\n",echobuf);
}
else
{
printf("I'm sorry, I did not receive any ACK, I'm shutting down...\n");
close(sd);
exit(1);
}
}
}
} while (n>0);