0
C++ 클라이언트 서버 응용 프로그램을 작성했으며 서버가 충돌합니다. 시나리오1 시간 후에 처음 연결 한 후 Tcp 수신이 실패합니다.
- 시작 서버
- 나중에 1 시간 (안 전) 클라이언트는 반환을 받아 들일에서 기다리고 -1 errno는 "열려있는 파일이 너무 많습니다"로 서버
를 연결합니다.
다른 컴퓨터에서 실행되는 특별한 기능이 없어서 기다리는 동안 수락이 많은 파일 설명자를 여는 것으로 나타났습니다. 사실입니까? 클라이언트가 언제든지 연결할 수 있도록이 문제를 해결하려면 어떻게해야합니까?
관련 서버 코드 :
int sockClient;
while (true) {
sockaddr_in* clientSockAddr = new sockaddr_in();
socklen_t clientSockAddrLen = sizeof(sockaddr_in);
sockClient = accept(sockServer, (sockaddr *) clientSockAddr,
&clientSockAddrLen);
if(sockClient == -1){
std::ostringstream s;
s << "TCP Server: accept connection error." << std::strerror(errno);
throw runtime_error(s.str());
}
connection->communicate(sockClient, clientSockAddr, clientSockAddrLen);
}
시나리오에서 나는 단 하나의 연결만을 가지고 있습니다 ... 그리고 누수가 다른 곳에서 발생한다면 어떻게 위의 내용을 받아 들일 수 있습니까? 나는 돌아가서 누수에 대한 코드의 다른 영역을 검토 할 것이다. 감사. – kroiz
문제가 발견되었습니다. 실제로 EJB가 옳았습니다. 다른 서버에 연결하려고 시도했지만 연결이 끊어져서 성공하지 못했지만 소켓이 해제되지 않은 루프가있었습니다. 그것은 "accept"가 실패하고 "socket"이 아닌 이유는 분명하지 않습니다 ... – kroiz