2017/06/17

[linux]ソケット送信した回数と受信する回数は関係がない

Linuxで、マルチスレッドで、ソケット通信するアプリを作っている。
ああ、慣れていない、慣れていないのだよ。。。


バグがいくつも出てきて困っているのだが、その1つに「こちらは送信したのに相手が受け取っていない」という現象があった。
write()は失敗していないし、そんなに取りこぼすようなところでもないし。

ログを見直していると、思ったより大きいデータ長の受信を行っているところがあった。
まさか・・・と計算すると、2つwrite()したデータ長と同じでした。
えー、write()って2回呼んだら、送信も2回で行ってくれるもんじゃないの??



Linux ソケット・プログラミングの 5 つの落とし穴

これの5番目、「落とし穴 5. TCP におけるフレーミング前提」か。
ええ、前提にしていましたとも。

今回はデータ長が載っているプロトコルでは無いので、解析しながらじゃないとデータ長が分からない。
が、今は受信したデータを解析する、というように作っているので、大幅な改造が必要になりそうだ。
ああ、慣れていない、慣れていないのだよ。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。