hello perfect programmer
i have 2 services one in java and other in c++ both act as client and server in exchange data but after 1 or 2 hours the service in c++ stop abnormally due to CLOSE_WAIT status OF TCP Connection increase on unix it multi thread application
str_write variable is BufferedOutputStream get from socket from c++ service and return to it
hint : this two section are shared between all threads in every service
str_write.write("send o c++ service @".getBytes(), 0, 10);
str_write.flush();
Thread.sleep(3000L);
str_write.close();
this.socket.close();
finalize();
return;
and c++ service is receive data like
int l;
char delem = "@";
timeval t_out;
fd_set set;
t_out.tv_sec = 6;
t_out.tv_usec = 0;
FD_ZERO(&set);
FD_SET(Socket,&set);
l = 8;
l = select(Socket +1, &set, NULL, NULL, &t_out);
setsockopt(Socket,SOL_SOCKET,TCP_NODELAY|SO_RCVTIMEO,(char*)&t_out,sizeof(struct timeval));
if(l==0)
{
printf("\n time out kk %i \n",timeout);
return -10;
}
else if(len<0)
{
printf("\n error in select 2 TCPClient \n");
return -5;
}
char a[1] = {0};
memset(data,0,sizeof(data));
ssize_t l1;
int i = 0;
int cycle = 0;
while(true)
{
l1 = recv(Socket,a,1,0);
if(l1==0)
{
printf("\n closed ");
i = 0;
break;
}
if(l1 == -1)
{
cycle++;
if(r==5 &&cycle<6)
{
sleep(1);
printf("wait");
continue;
}
break;
}
data = stpcpy(data,a);
i +=l1;
if(delm_len>1 &&strstr(data,delem)!=NULL)
{
printf("\n hit strstr \n ");
break;
}
else if(delm_len==1 && delem[0]==a[0])
{
r = 1;
printf("\n hit \n");
break;
}
if(i>=len && r==1)
break;
} printf("\n data recv %i r = %i ",i,r);
What I have tried:
every thing try reduce fail not prevent