Как я могу оптимизировать TCP-соединение между клиентом и серверами
привет Идеальный программист
у меня есть 2 Службы одна на java а другая на c++ обе действуют как клиент и сервер в обмене данными но через 1 или 2 часа служба на c++ останавливается ненормально из за CLOSE_WAIT статус TCP соединения увеличивается на unix it многопоточном приложении
переменная str_write является BufferedOutputStream добраться из сокета в C++ службу и вернуться к нему
подсказка : эти два раздела являются общими для всех потоков в каждой службе
str_write.write("send o c++ service @".getBytes(), 0, 10); str_write.flush(); Thread.sleep(3000L); str_write.close(); this.socket.close(); finalize(); return;
а служба c++ - это получение таких данных, как
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)); // strcpy(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; }//while(i< len) ; printf("\n data recv %i r = %i ",i,r);
Что я уже пробовал:
каждая вещь попробовать снизить удастся не допустить