我試圖創建一個小的HTTP代理,可以根據需要重新編寫請求/標頭以適應我的要求。如果已經存在,請將它指向我。否則...Java/Groovy Socket - 檢測以非阻塞方式關閉的套接字
我寫了一些東西,幾乎工作。它可以做代理功能,但不能重寫(還)。問題是,我無法檢測到遠程套接字何時未被阻塞讀取而關閉。對於這個東西的功能來說它是關鍵的,它能夠檢測到沒有阻塞的插座被關閉。我已經清理了Java API文檔,我找不到任何跡象表明它甚至是可能的。以下是我所擁有的:
while (this.inbound.isConnected() && this.outbound.isConnected()) {
try {
while ((available = readFromClient.available()) != 0) {
if (available > 1024) available = 1024
bytesRead = readFromClient.read(buffer, 0, available)
writeToServer.write(buffer, 0, bytesRead)
}
while ((available = readFromServer.available()) != 0) {
if (available > 1024) available = 1024
bytesRead = readFromServer.read(buffer, 0, available)
writeToClient.write(buffer, 0, bytesRead)
}
} catch (e) {
print e
}
println "Connected: " + this.inbound.isConnected()
println "Bound: " + this.inbound.isBound()
println "InputShutdown: " + this.inbound.isInputShutdown()
println "OutputShutdown: " + this.inbound.isOutputShutdown()
print "\n";
Thread.sleep(10)
}
關閉套接字的測試永遠不會指出套接字已關閉。而且,正如我所提到的,我無法找到任何有關如何在不進行阻止讀取的情況下檢測到流中「END OF FILE」條件的示例。
還有一種方法。這裏有人知道它是什麼嗎?
同意!我現在正面臨着這個問題 - 如果另一方死亡,我不會收到讀取事件,甚至寫入套接字也不會報錯。多麼痛苦...... – trojanfoe 2011-02-08 11:15:39