高梨です。

Thu, Nov 09, 2000 at 01:14:01PM +0900 において
akira yamada / やまだあきら さん曰く:

> 興味深いです. 
> (後で debian package にしたいと思っています)

ありがとうございます。

#yendot  や むあんてな にも載せていただいた
#ようですね。(^^; 知り合いの masy から教えら
#れました。

> S> とはいえ、まだまだ全然未整備な状態なので、テスト & 
> S> デバッグに御協力いただければ幸いです。パッチは随時
> S> 受付中なので、どしどしご応募ください。 (^^;
> 
> なんとなく動いちゃったのですが(といってもサンプルを動かしただけで
> ドキュメントにもあたっていないのですが ^_^;),

ごめんなさい、ドキュメントは殆んど用意できてません。
というか、もともとの adns ライブラリ自体、ドキュメント
が adns.h だけという かなり硬派なモノなので doc 書きづ
らいというのもあるですが...。(--;

> どのあたりを気にしてらっしゃるのでしょう?

えっと、実はいろいろあります。

1) 実は全然 asynchronous じゃない

   このライブラリの特長は (ほとんど) nonblock に DNS を
   引けることにあるんですが、それをするのに 複数の query
   を送信してから query の状態を check する、という手法を
   取っています。check の結果が「未解決」なら、また後で 
   check するわけです。
   
   一方、検索が解決するまで待っている関数もあり、それぞれ
   C 的には adns_check, adns_wait となります。

   以下は adns.h からの引用です。

/*                                                                            
 * Example expected/legal calling sequence for submit/check/wait:   
 *  adns_init                                             
 *  adns_submit 1                               
 *  adns_submit 2                     
 *  adns_submit 3           
 *  adns_wait 1   
 *  adns_check 3 -> EAGAIN
 *  adns_wait 2                                                               
 *  adns_wait 3                                                     
 *  ....                                                  
 *  adns_finish                                 
 */   
   
   で、僕のコード(Adns.c) では、最初の adns_init の返り値 と
   adns_submit の返り値をセットにして state_query という一つ
   の構造体の中にまとめているのですが、これが wait する分に
   は問題ないものの、 loop を回して その中で check しようと
   するとうまく動きません。

   これが動かないことには特長を活かしきれていないわけで、
   普通のリゾルバライブラリと変らないんですね。
   
2) Queue, Thread と相性がよくない
   
   1) と関連するのかもしれませんが、query をオブジェクトと
   して Queue に載せるとうまく動きません。また check する
   loop を Thread として別立てしても駄目なんです。
   
   socket を内包している構造体へのポインタをオブジェクト化
   するのは駄目なのかな とか思ってるんですが、その辺どう
   やって調べたらいいのかもわかりません。

> P.S.
> RAA には登録されませんか?

それも考えたのですが、今の完成度を考えると...。ここでもう
少し練っていただこうかな、と。

> あとバージョンを付けてもらえるとうれしいです.

ですね。まあとりあえず、0.1 ということで。

--
Shinobu Takanashi <sino / kappe.co.jp>
  URL : http://www.kappe.co.jp/~sino/
  PGP(GnuPG) Fingerprint : 9316 F30E 1608 36CD BE02  D3CB 0F51 AD0E 6A16 CCE1