2009-05-12 6 views
1

Java-COM 브리지를 통해 타사 COM 구성 요소를 사용하는 Java 응용 프로그램이 있습니다. 이 COM 구성 요소는 원격 호스트에 대한 소켓 연결을 엽니 다.TCP 소켓 시간 초과 구성

이 호스트는 응답하는 데 약간의 시간이 걸릴 수 있으며 시간 초과가 발생하는 것으로 의심됩니다. 내가 말했듯이 폐쇄 소스 제 3 자 구성 요소이기 때문에 확실하지 않습니다.

이 구성 요소의 API는 소켓 연결을 내게 노출시키지 않으므로 시간 초과를 구성 할 방법이 없습니다. 그래서 시스템 기본 타임 아웃을 조정할 방법이 있는지 궁금합니다.

저는 Windows Server 2008 x64 Enterprise Edition을 사용하고 있습니다.

답변

1

시간 제한이 발생했는지 여부를 런타임에 알 수 있도록 응용 프로그램을 작성 하시겠습니까? 아니면 닫힌 소스 COM 구성 요소의 동작을 검사 하시겠습니까? 후자의 경우, devbox에 Wireshark를 설치하고 연결을 관찰하십시오. 그것이 전자의 것이라면, 자바가 본국으로 전화를 걸 때 영원히 걸리지 않도록하고 싶습니까? 그렇다면 java.util.concurrent Executor 서비스에 대해 살펴보십시오. 다른 스레드에서 메소드를 호출하고 최대 N 초 동안 대기 한 다음 제어를 스레드로 리턴하는 방법이 있습니다. 당신이 연결이 설정보고, 아마도 시간 제한에서 삭제하려는 경우

0

자신의 SocketImplFactory를 도입 할 수 있습니다 (java.net.Socket 클래스의 정적 메서드 setSocketImpl() 참조). 그런 다음 SO_TIMEOUT 매개 변수 값을 사용하여 SocketImpl 객체를 만들 수 있습니다.

+0

을 소켓은 C++ I에서, 자바 코드에 의해 만들지 만, COM 개체가되지 않는 추측. – tuler

+0

아, 네. 당신 말이 맞아요. 음, 네이티브 윈도우 라이브러리에서도 비슷한 일이 가능하지 않은지 궁금합니다. – Matej

0

TcpMaxDataRetransmissions에 대한 Microsoft의 "Windows Vista TCP IP 구성 설정"에서 설명한 레지스트리 설정을 사용하면 필요한 전체 시간 제한을 설정할 수 있습니다.

물론 실제 오류에 대한 응답이 지연되는 과정에서 서버의 나머지 부분을 손상시키지 않도록 조심해야합니다.