2014-02-17 120 views
0

這裏是最相關的代碼,在與FRC的Java圖像的cRIO運行:文件描述符耗盡與Connector.open

try { 
     SocketConnection http = (SocketConnection) Connector.open("socket://" + BEAGELIP); 
     InputStream data = http.openInputStream(); 
     database = ""; 
     int p = data.read(); 
     while (p >= 0) { 
      database += (char) p; 
      p = data.read(); 
     } 
     data.close(); 
     http.close(); 
} catch (Exception e) { 
    System.out.println(e); 
} 

這種方法被反覆調用。

多次失敗後進行連接(例如,服務器未插入),IOException異常切換從java.io.IOException: ConnectException: connect refusedjava.io.IOException: errno: 24 on fd:-1 during socket create

我們認爲這可能發生的原因是因爲失敗,Connector.open返回NULL,這是我們不能close(),凍結一個文件描述符。

什麼是正確的方法來防止在這個過程中使用所有的文件描述符?

如果任何人都可以提出如何完成這件事的建議,那將是美好的。

回答

0

您的關閉必須位於finally {}塊中。否則,如果發生異常,它們不會發生,並且遲早會出現異常,

+0

我們嘗試過這種方式,但是,Connector.open無法設法將其返回值保存到變量中,因此我們有隻有null才能關閉。 如果這是它需要完成的方式,的確,對您給出更深入的解釋會有幫助。 –