[Gauche-devel-jp] Re: send/recv

Back to archive index

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





Gauche-devel-jp メーリングリストの案内
Back to archive index