2005 年 12 月 29 日 22 時 18 分

行指向


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


そろそろメインの UPnPNT の実装をしたい所だが、
その前にまだまだ壁がある。今日はひとつの壁を取っ払おう。

FTP は行志向のプロトコルだ。コントロール接続においては、
クライアント・サーバともに行単位でデータをやり取りする。
コマンド行や応答行は、原則として CRLF で終端するので、
データを行単位で送受信できると効率が良い。

残念ながら、ソケットを使った TCP のプログラミングでは、
一度の send が、一度の recv で受け取られる保障はない。
TCP により送信される順番と到達は保障されるが、
それがどのように分割されるかは分からない。

そのため、今日は、TcpConsole クラスを作成し、
Socket に行単位の操作ができるバッファ層を追加する。
仕様がいまいちだが、今のところは下のようにしておこう。
今はテストしたいので設計に時間をかけたくない。

class TcpConsole : public Socket {
public:
    TcpConsole(std::auto_ptr<Socket> socket, int maxLineSize);

    // 完全な行もしくは maxLineSize 文字を受信。
    // 切断された場合は NULL を返す。
    const char *ReadLine(void);

    // NUL 終端テキストを送信する。
    int WriteLine(const char *text);
};

FTP は TELNET をベースにしているため、
本当は IP や SYNC といった信号も扱う必要があるのだが、
今回は無視することにする。ほとんど利用されていないし。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.