2013-10-03 3 views
0

vxworks 6.3에서 실행되는 LPD 서버가 있습니다. 내가 제어 할 수없는 클라이언트 응용 프로그램은 매 10 분의 1 초마다 LPQ 쿼리를 보내고 있습니다. 235 개 요청 후 클라이언트는 연결을 시도 할 때 RST를받습니다. 시간이 지나면 장치는 다시 RST를 보내기 시작할 때까지 몇 가지 쿼리 (약 300)를 다시 수락합니다.vxworks 6.3 활성 소켓 최대 255?

나는 그것이 RST의 원인이되는 TCP 스택 있음을 확인했다. 내가 눈치 챈 몇 가지 것들이 있습니다.

1) 나는 어느 정도 내가 실행중인 다른 응용 프로그램의 수를 변경하면 가능합니다 소켓의 수를 변경할 수 있습니다. 예를 들어, 나는 4함으로써 내가 LPR에 요청을 보낼 경우 239 2)에 (235)에서 접수 번호를 변경 소켓 (포트 515)와 다른 포트 (예를 들어, 포트 80), 전에 허용하는 총 연결 수를 해제 RST 시작은 235에서 일정하게 유지됩니다. 3) TIME_WAIT에 앉아있는 소켓이 많이 있습니다.
4) 클라이언트의 모의 버전이 있습니다. 클라이언트가 매 4 초마다 하나의 요청을 느리게 처리하면 서버가 연결을 거부하지 않습니다. 5) 서버의 응답 속도가 느려지면 연결이 거부되지 않습니다.

그래서 내 이론이 일부 공유 리소스가 있다는 것입니다 Vx 웍스는 주어진 시간에 소비 한 수 (내 최고 추측으로는 소켓 핸들의 총 수는있다). 또한이 숫자가 닫을 때 누군가가 내가 더 많은 연결을 허용하도록 VxWorks를 얻을 수있는 방법을 알고, TIME_WAIT에서 그들을두고 있는가 255

밖으로 꼭대기 같은데요? 커널 구성을 살펴본 후 원격으로 보았던 모든 값을 변경했지만 번호를 변경할 수 없었습니다.

우리는 우리가 SO_LINGER하지만하지 수용 가능한 솔루션을 설정할 수 있다는 것을 알고있다. 그러나 이렇게하면 클라이언트 연결이 거부되는 것을 방지 할 수 있습니다. 또한 SO_LINGER에 대한 제한 시간 값을 변경하려고 시도했습니다. VxWorks에서는 지원되지 않습니다. 켜거나 끕니다.

감사합니다. 게일

답변

0

나에게 모든 LPQ 쿼리에 대해 새로운 연결을 만들고있는 것처럼 들리지만 쿼리가 끝난 후에는 연결이 닫히지 않습니다. 내 의견으로는 할 일은 하나의 TCP 연결을 수락 한 다음이를 사용하여 모든 LPQ 쿼리를 얻는 것입니다.하지만 클라이언트 응용 프로그램에 개조가 필요할 수 있습니다. 클라이언트의 개조를 피하려면 각 LPQ 쿼리 후 TCP 연결을 닫아야합니다.

또한 #define NUM_FILES config.h (또는 configall.h 또는 그 파일 중 하나)를 조정하여 vxworks에서 열리는 FD의 최대 수를 설정할 수 있지만 FD 누수가있는 경우 오류를 연기합니다 , 당신이 아마 할 것입니다.

+0

안녕하세요. Chris, 조언 해 주셔서 감사합니다. 우리는 실제로 누수가 없습니다. 모든 연결이 끝나면 모든 연결이 닫힙니다. 1 분 후 소켓은 TIME_WAIT에서 벗어납니다. TCP 스택은 지연된 네트워크 트래픽을 기다리는 소켓을 열린 상태로 유지합니다. NUM_FILES를 변경하려고 시도했지만 동작을 변경하지 않은 것 같습니다. 다행히도 우리는 고객에게 질문을 덜하기 위해 애플리케이션을 변경하도록 유도했기 때문에 전체 문제를 피할 수있었습니다. – GailG