Shiro Kawai
shiro****@lava*****
2003年 12月 10日 (水) 11:45:05 JST
ども。 要望はずいぶん前からあったんですが、なぜ実装されていなかった かとういうと、バッファをうまく扱う統一的な方法が欲しいと 思っていたからです。送る方はともかく、受ける方は用途によっては callerがあらかじめu8vectorかなんかでバッファを取っておきたい ということがあるでしょう。 現状だとそれを実装しようとするとgauche.netがgauche.uvector に依存してしまって、ちと面倒くさい。 そこで、「バッファになり得るもの」という抽象クラスをCレベルで 作ろうかなとか考えつつ今に至ります。 > Function: socket-send socket message &optional flags > Function: socket-sendto socket message to &optional flags > Function: socket-recv socket nbytes &optional flags > Function: socket-recvfrom socket nbytes &optional flags ただ、これでAPIを公開しておいて、将来messageとnbytesのところに uvectorも渡せるように拡張するのは可能なので、このパッチで良いと 思います。 (recvfromはいずれ値を受けるためのsockaddrも渡せるようにしたいかな… あんまりSchemeっぽくは無いんですが、タイトなループの中では 「GCをトリガしないように書く」ということが必要になる場合があるので) あと、私の好みでは、Scm_MakeSockAddr2を作るよりはScm_MakeSockAddrで 第一引数にNULLを渡したらstruct sockaddrを見てクラスを選ぶように する、みたいな方がいいですね。 Scm_MakeSockAddrのAPIを変えちゃうって手もありますが、もしかして 将来ユーザー拡張クラスを許すとかあるかもしれないので、残しておいた 方が良いかな。 テストケースも書けますか? テストがあればcheckinしてもらって構いません。 --shiro