2016/05/28

[esp8266]espconn_gethostbyname()への誤解

AndroidやったりLinuxやったり落ち着きがないが、今日はESP8266だ。
しかもNon-OS版なので、あまり使っている人がいないような気がする。
みんなArduino使うからなぁ。。。

 

さて、今回はespconn_gethostbyname()についてだ。
名前の通り、ホスト名からIPアドレスを引いてくれる関数なのだが、使っていてよくわからない動作をしていたのだ。
何かというと、引数にip_addr_tのアドレスを与えるのだけど、名前を引き終わってコールバックされたときにはそのアドレスは更新されず、コールバック関数の引数で渡されるのだ。
じゃあ、引数で与える意味がないではないか、という疑問だ。

 

これはEspressifのドキュメントではなく、Kolbanさんのドキュメントを読まないとわからなかった。
Espressifのドキュメントでは、この関数の戻り値がESPCONN_INPROGRESSだと「already connected」となっているのだが、Kolbanさんのを読むと「キャッシュで持っていないのでlookupしにいきます」という意味らしい。
まあ、LinuxもPROGRESS系の戻り値はそうだよな。。。

だから、戻り値がOKのときには即座に結果を引数に返すけど、INPROGRESSの場合はコールバックの引数で返す。
コールバックの際は関数呼び出し時の引数で渡したアドレスの方は使わない、という動きをしているようだ。
サンプルでは渡すipaddr_tをグローバル変数にしてあるけど、こういう動作ならばローカル変数でよいはずだ。


Arduino版だと、この辺りは見えなくなっているようだから楽そうだ。
それに、誰かの作ったライブラリを使えるのも魅力だから、そのうち移行したいものだ。

0 件のコメント:

コメントを投稿

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