2009-11-18 2 views
0

우리는 G-Series에서 H-Series 로의 Tandem NonStop 시스템간에 간단한 Java 응용 프로그램을 포팅합니다. Java 버전은 1.5.0_02입니다. 에서 출력 스트림을 얻거나 클라이언트 소켓을 여는 같은 기본 I/O 작업을 수행 할 때HP 탠덤 (논스톱)에서 Java 스트림을 가져 오는 데 문제가 발생했습니다.

, 우리는

java.io.IOException: Value out of range

또는

java.net.SocketException: Value out of range

("값과 같은 예외를받을 범위 "는 텐덤 원어민 전문 용어입니다.

아무도 비슷한 문제가 있습니까? 즉 I/O 손상은 JNI를 망친 것처럼 보입니까?

시스템에 문제가 있다고 생각 되나?

감사합니다.

편집 : 요청에 따라 미리보기를 추가

샘플 조각 (A) - 사용 Runtime.exec() (개정판)

Properties envVars = new Properties(); 
Process p = r.exec("/bin/env"); 
envVars.load(p.getInputStream()); 

스택 트레이스 (A) :

java.io.IOException: Value out of range (errno:4034) 
    at java.io.FileInputStream.readBytes(Native Method) 
    at java.io.FileInputStream.read(FileInputStream.java:194) 
    at java.lang.UNIXProcess$DeferredCloseInputStream.read(UNIXProcess.java:221) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:254) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:313) 
    at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411) 
    at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453) 
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183) 
    at java.io.InputStreamReader.read(InputStreamReader.java:167) 
    at java.io.BufferedReader.fill(BufferedReader.java:136) 
    at java.io.BufferedReader.readLine(BufferedReader.java:299) 
    at java.io.BufferedReader.readLine(BufferedReader.java:362) 
    at util.Environment.getVariables(Environment.java:39) 

마지막 행이 실패하고 출력이 콘솔 (!)로 재 지정됩니다.

샘플 조각 (B) - HttpURLConnection를 사용 :

public WorkerThread (HttpURLConnection conn, String requestData, Logger logger) 
{ 
    this.conn = conn; 
    ... 
} 


public void run() 
{ 
    OutputStream out = conn.getOutputStream(); 
} 

스택 트레이스 (B) :

는 이전과 다른 문제에 대한 해결 방법 이었기 때문에 케이스 (a)는 피할 수
java.net.SocketException: Value out of range (errno:4034) 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 
    at java.net.Socket.connect(Socket.java:507) 
    at sun.net.NetworkClient.doConnect(NetworkClient.java:155) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:365) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:477) 
    at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:280) 
    at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:337) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:176) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:736) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:162) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:828) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230) 

JRE 버전 (!), 소켓과 동일한 동작은 실제로 불쾌합니다.

+0

코드 스 니펫을 게시하십시오. – Xailor

+0

및 전체 스택 추적도 좋습니다. – TofuBeer

답변

0

업데이트 : 문제는 가짜 .so 라이브러리 때문에 발생합니다.

0

오류 코드 4034는 특정 서버가 NonStop 클러스터에서 실행 중이 아님을 나타냅니다. 시스템이 올바르게 설정 되었습니까?