くまりゅう日記

もっと過去の日記
[.NET | BeOS | Blender | COLLADA | fossil | mono | monotone | NPR | OpenGL | PeerCastStation | Riko | Ruby | Silverlight | TRPG | XNA | ゲーム | ゲーム作り | プログラム | | 模型]

2019-10-15

日記

台風は無事でした。

台風は無事だったが前後で体調を崩して風邪気味。鼻喉がやられた。台風の前からちょっと怪しげだったが、台風で外に出られなくておとなしく寝てたら治ったぞ、と思ったら暑くなって寒くなってまたダメですよ。そんなに酷くはないのが救いだ。

健康組合の保養所使ってみようと来週熱海に泊まりに行く予定で予約入れてたんだが、どうも台風で断水しているようだ。 すぐ直ればいいけど長引いたら無理だろうなあ。しばらく様子見。

技術書典の在庫確認をしたが新刊は21部しか減ってなくて、うち3部程は見本に使ったので18部くらいしか捌けてないようだった。 ダウンロード版を確認したら1部も売れてなかった。まあそんなもんよね……。

書いてくれた人にまだ現物送ってなかったので送ろうとして、こないだ100円ショップで厚紙封筒が売ってたのを見かけたので買いに行ったら売り切れてた。 じゃあ文房具屋にあるかな……と見に行ったら近くにはLoftとかいうシャレオツ文房具屋しかないため、厚紙封筒とかいう実用品は売っていないのであった。 ちょっと先まで足を伸ばすしかねえか。

[PeerCastStation] 通信で失敗した

Owinベースに作りかえてからいろいろ動きが怪しいところがあったので調べたり直したりしている。

もしかしてデータ送信しきる前に切れちゃってるんじゃないかと思うところがあったので、ちゃんとGracefully shutdownをしようと思った。日本語で言うとなんだろう。上品なシャットダウン? .NETであまり考えずにTCP通信するとNetStreamてクラスを使うことになるが、こいつはStreamの一種でShutdownのインターフェースがなく、中身的にはCloseすると切る直前で送受信両方のShutdownをするだっけっていう乱暴なシャットダウンしかできない。

それはあんまりだろうということでSocketを直接使って上品なシャットダウンを実現することにした。

まあそれ自体はできたんだが、従来のコードが乱暴なシャットダウン前提でコードを書いちゃってるので互換性が怪しくなってしまった。 こっちが送信をシャットダウンしても従来のコードは受信と送信は別物です!と言わんばかりに受信スレッドが終了しても送信スレッドが延々とデータを送ってきて、こっちはいつまでも受信しきらないので終われないのであった。

送信終了前にちゃんと通信終了コマンドを送ってあげれば上手くいったけど、他の場所でも同じようなこと起きそうな気がするなあ。

書いてて思ったけど、送信シャットダウン後は受信も一定時間で強制シャットダウンすればいい気がしてきた。本当に上品にはシャットダウンできないかもしれないが、相手が乱暴者の可能性もあるので仕方あるまい。

.NETのStreamでのI/O抽象化はソケットに対応できてなくて残念だから、ソケット使う場合にはあんまりあてにしない方がいいなあ、と今更思った。いや何度もそう感じてはいたんだが、あらためてな。 Windows自体がソケットとその他I/Oの抽象化が上手くできていないので仕方ないということもあるんだが、.NETなんてその問題が分かりきった時代に設計されたもんなんだから上手いことやってほしかったなあ……。


ページのトップへ | トップ «前の日記(2019-10-03) 最新 次の日記(2019-11-06)» | 編集 | kumaryu.net by kumaryu