Rubyで遊んだ日々の記録。あくまで著者視点の私的な記録なので、正確さを求めないように。
Rubyと関係ない話題にはその旨注記しているはず。なので、一見関係無いように見える話題もどこかで関係あるのかもしれません。または、注記の書き忘れかもしれません...
ここまではいいですね。
で、
Thread#kill
されるとか)が発生したときか、であるCancelIoEx()
なりCancelSynchronousIo()
を実行すればいいじゃないSetThreadContext()
で対象のスレッドのEIPを書き換えればどんな処理でも挿入できるよSetThreadContext()
は機能しません...WaitForMultipleObjects()
で待てばいいんじゃね?_ というわけで、overlapped I/Oについてわかってることを確認しておきましょう。
CreateFile()
時にoverlappedフラグを立てないとダメread()
/write()
を置き換えるなら、当然テキストモード対応を忘れないようにread()
/write()
にUTF-8/UTF-16対応というのが入ったのでそれも考慮して再実装しないといけない
_ とりあえず、socketにはtextmode問題がなく(*1)、かつ、Win9xでもoverlapped I/O処理が可能なので、recv
, recvfrom
, send
, sendto
で実装して実験してみました。
首尾は上々、と思ったのですが、test/socket/test_nonblocking.rbが固まることを発見。
混ぜるな危険、ってやつかなあ。困った困った。
_ まあ、それはそれとして、textmode問題はやっぱuniversal newlineを実装することによって抜本的な解決をはかりたいところ。
VC++8のUTF-8/UTF-16対応はこの際無視ですな。rubyの中から以外で使うわけじゃないし。
(*1) textmode問題がなく
デフォルトでbinmodeなので。
被捕捉アンテナ類
[Ant]
[Antenna-Julia]
[Rabbit's Antenna]
[Ruby hotlinks]