2009-11-11 4 views
1

소켓이 열려 성공할 때까지 특정 간격으로 서버에 연결하려고하는 루프가있는 클라이언트 TCP 소켓 (C++)이 있습니다.HPUX에서 연결 실패 후 유휴 tcp 파일 디스크립터

는 프로그램의 버그가 실패한 연결 후 파일 기술자에 호출하지 close 발생, 재 시도가 다시 연결하면 루프의 다음 반복에 socketconnect를 호출 할 때 같은 (오픈) 설명을 다시 사용 .

Linux 컴퓨터에서 이것은 HPUX에서 결국 24 - '열린 파일이 너무 많습니다.'- lsof는 TCP *:* (IDLE)으로 나타났습니다.

여기 Linux와 HPUX의 차이점은 무엇입니까?

답변

2

나는 그것이 HPUX가 소켓에 커널을 추가 한 근원에서 왔다고 생각한다. 내가 1980 년대 후반에 올바르게 기억한다면 Berkeley Sockets를 공유 객체 라이브러리로 추가했는데, 본질적으로 파일 I/O 시스템의 맨 위에 하나 또는 두 개가 추가되었습니다.

그 방법으로도 UX는 socket() 호출이 사용하지 않는 파일 설명자를 재사용하지 않는다는 것을 나타냅니다. 아마도이 파일을 인식하지 못하기 때문에 유지 보수 엔지니어가 추가하지 않아도됩니다. Linux에서 socket()은 다른 주요 구성 요소와 마찬가지로 커널의 일부분이므로 재사용이 가능한 파일 설명자를 알고 있습니다.

+0

정보를 제공해 주셔서 감사합니다. – user204884

0

프로세스가 동시에 열 수있는 파일의 수는 60 by default on HPUX이고, on Linux is 1024 인 것 같습니다.

+1

리눅스에서는 사용하지 않는 파일 설명자가 유휴로 표시되지 않고 프로세스의 fd 카운트에 추가되지 않습니다. – user204884