Linuxで、マルチスレッドで、ソケット通信するアプリを作っている。
ああ、慣れていない、慣れていないのだよ。。。
バグがいくつも出てきて困っているのだが、その1つに「こちらは送信したのに相手が受け取っていない」という現象があった。
write()は失敗していないし、そんなに取りこぼすようなところでもないし。
ログを見直していると、思ったより大きいデータ長の受信を行っているところがあった。
まさか・・・と計算すると、2つwrite()したデータ長と同じでした。
えー、write()って2回呼んだら、送信も2回で行ってくれるもんじゃないの??
これの5番目、「落とし穴 5. TCP におけるフレーミング前提」か。
ええ、前提にしていましたとも。
今回はデータ長が載っているプロトコルでは無いので、解析しながらじゃないとデータ長が分からない。
が、今は受信したデータを解析する、というように作っているので、大幅な改造が必要になりそうだ。
ああ、慣れていない、慣れていないのだよ。。。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。