前回は、オープンしたsocketをpoll()したままwrite()できるの?という疑問提起だけで終わっていた。
我ながら「最後までやってから書けよ」と思ったけど、力尽きたのだ。
やってみたが、普通にできた。
まあ、そりゃそうか。
Live Writeのプラグイン機能がまだ使えないのでソースは載せられないが、だいたいこういうことをやった。
- socket()する
- connect()でサーバと接続する
- pthread_create()してスレッドにソケットのディスクリプタを渡す
- ワーキングスレッド側で、poll()する(POLLIN)
- メインスレッド側で、write()する
送れたし、受信もできた。
なーんだ。
それっぽくロジックだけ抜き出して送受信して動いていたのだが、ESP8266でちょっと期待と違う動きをすることがあった。
私の期待と違っただけで、よく考えると「そう作っておけよ」というところなのだが。
何かというと、受信完了コールバックが呼ばれたとき、データに2パケット分のデータが入っていたのだ。
2回呼ばれると思っていたから、1回分の受信処理しかやってなくて、1つ飛ばしてしまうという現象があったのだ。
なかなか気付かなくてねぇ。
もう1つ確信が持てないままなのが、送信だ。
送信完了コールバックが返ってくる前に送信すると、うまくいかなかったような気がしたのだ。
送信バッファを持ってないのかと思ったけど、struct espconn_packetを見ると持っていても悪くなさそうな感じもしている。
ここは、要調査ですな。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。