テスト版4でshogi-serverでの対局中、着手放置で時間切れになった場合になかなかサーバ側が時間切れを検知できなかった件のついてですが、
https://osdn.net/projects/shogi-server/scm/git/shogi-server/blobs/master/shogi-server では受信周りの処理が以下のようになっているようです。 ``` # Return # - a received string # - :timeout # - :exception # - nil when a socket is closed # def gets_safe(socket, timeout=nil) if r = select([socket], nil, nil, timeout) return r[0].first.gets else return :timeout end rescue Exception => ex log_error("gets_safe: #{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}") return :exception end ```
通常、この処理で60秒間受信が無かった場合は:timeoutを返し、時間切れの検出処理等を行っているようなのですが、これがテスト版4で対局が行われた際には60秒おきに空行を受け取り続けていたため、なかなか:timeoutが発生せずに時間切れの処理に入れていなかったと見られます。
|