Contentを個数でなく時間で消すようにした

Contentの保持期間を個数にしていたが、パケット数が多い場合にすぐ溢れてしまうので個数でなく時間で消すようにしてみた。
Contentに受信した順番を表すSerial番号をつけるようにした

ContentCollectionから次のContentを取得しようとして無かった場合に、受信していなかったのか受信はしたが既にタイムアウトで消えたのかわからなくなるので、受信順のシリアル番号をつけて消えたかどうか判別できるようにした。
StreamConnectionでのデータ送信を16KiB単位で行うようにした

StreamConnectionのデータ送信タイムアウトが、送るデータサイズにかかわらず一定であったため、多くのデータを送ろうとするとタイムアウトする可能性があった。
この対策のためデータを最大16KiB単位に分割して送るようにし、送信タイムアウトは16KiB送りきるまでの時間でタイムアウトするように変更した。
OutputStreamBaseを内部的にStreamConnectionを使用するよう整理した

StreamConnectionとOutputStreamBaseで非同期送受信のためのコードが重複してたので、OutputStreamBaseがStreamConnectionを使用するように整理した。
PCPのリレー出力でパケットのスキップが起きたとき切れるようにしてみた

PCPのリレー出力はパケットスキップが起きてもそのままリレーを継続していたが、StreamConnectionがそう簡単に送信タイムアウトしないようになったために多少送信が間に合わなくても切れなくなった。
結果として送信タイムアウトがほぼなくなってしまうため、PeerCast同様にパケットのスキップが起きた時には切断をするようにした。
ただし上流で起きたパケットスキップが伝搬しないように、ローカルでタイムアウトして消えたパケットを検出した時のみスキップで切れる。
PCPとHTTPの受信ストリームにおけるタイムアウトを調整した

PCPとHTTPのSourceStreamにおいてタイムアウトを調整した。
双方とも受信タイムアウトは10秒、送信タイムアウトは16KiBにつき8秒とした。
送信タイムアウトは16Kbps未満で切れるようにしたが、受信タイムアウトは特に理由がないので再考の余地あり。
PCPSourceStreamでなるべくAtom受信処理を一括で行うようにした

PCPSourceStreamでAtomを1つずつ受信して処理していたが、パケット数が多いときに処理が滞りがちになるのでなるべく一度に沢山受信して処理するように変更した。
StreamConnectionで送信タイムアウトが起きた時に送信の終了が正しく行われないのを修正した

StreamConnectionで送信タイムアウトが起きた際に、送信終了処理を行っていなかったのでCleanup時にいつまでも送信完了待ちをしてしまうようになっていたのを修正した。
StreamConnectionのRecvとSendを使いやすくした

StreamConnection.Recvでは渡したprocがEndOfStreamExceptionを投げた時に読み込み中断していたが、例外を投げるのは重いので読み込み完了したかをbool値で返す関数も受け取れるようにした。
また、SendではStream.Writeに合わせてOffsetとLengthも指定できるようにした。
Merge branch 'ContentTimeLimit'