なひです.
Meeting2000-0.92b1で,一応acceptのEPROTOとwrite syscallのSIGPIPEを
保護してみました.
acceptの方については「Errno::EPROTO」なんて捕まえ方で
良かったんでしょうか.RubyのErrorクラスの解説を見つけられませんでした.
ぴかちう本(やめなさい)待ちでしたっけ? (^_^;
ただ,厳格な(?)だえもんを作ろうとするともっとあちこち面倒ですし,
「正しく(?)例外が上がってるんだから」ということで
acceptのEPROTOは無視してもいいのかもしれません.
SIGPIPEの方は,ほっとくと / application.commitを通らないので,
溜めたデータがリセットされちゃいますよね...
適当な修正ですので,メッセージ統一とかログファイル対応準備?
とかしたほうがいいのかもしれません.(^_^;
--- HttpServer.rb.orig Wed Feb 24 22:53:09 1999
+++ HttpServer.rb Fri Feb 26 12:50:21 1999
@@ -8,7 +8,12 @@
serverSocket = TCPserver.open(port)
while TRUE
- socket = serverSocket.accept
+ begin
+ socket = serverSocket.accept
+ rescue Errno::EPROTO
+ p 'Rescued ' + $! + '. Continue...'
+ next
+ end
Thread.start { readProcess(socket) }
end
ensure
@@ -108,7 +113,12 @@
header += k + ": " + v + "\r\n"
}
+ trap( 'SIGPIPE' ) {
+ p 'SIGPIPE received. Client might be close this session. Continue...'
+ }
socket.write(header + "\r\n" + content)
+ trap( 'SIGPIPE', 'DEFAULT' )
+
socket.close
rescue