I am working with raspberry pi 4 for connecting devices with tcp/ip i need some delay for socket timeout if no response from my server. The raspberry pi act as a client i am using the following C program code for socket, In that for timeout i use setsockopt but it doesn’t create the expected time delay after some fraction of seconds it is getting timeout i want minimum 2 seconds delay.
int sockfd,Soccon,DataIn;
struct sockaddr_in server;
struct timeval tv;
char GpmsData[4000],Gpms[20];
sockfd=socket(AF_INET,SOCK_STREAM,0);
server.sin_addr.s_addr = inet_addr("192.168.0.148");
server.sin_family=AF_INET;
server.sin_port=htons(30000);
tv.tv_sec= 5; // 5 seconds delay
tv.tv_usec=0;
setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(const char *)&tv, sizeof(tv));
setsockopt(sockfd,SOL_SOCKET,SO_SNDTIMEO,(const char *)&tv, sizeof(tv));
Soccon=connect(sockfd,(struct sockaddr *)&server,sizeof(server)) ;
Gpms[0]=0x01;
Gpms[1]=0x03;
Gpms[2]=0x02;
Gpms[3]=0x00;
Gpms[4]=0x03;
Gpms[5]=0x00;
Gpms[6]=0x05;
if(send(sockfd,Gpms,7,0)<0)
{
printf("Data Sending Problemn");
}
else
{
printf("Data Sendedn");
DataIn=read(sockfd,GpmsData,3800);
if(DataIn<0)
{
printf("Data Not Receivedn");
}
}
if the server not responding it doesn’t wait for 5 seconds after some milliseconds it is timeout immediately. I am using Raspberry pi 4 with bookworm 64bit os is there any issue with OS or something in my code please guide me to resolve the issue