rwhod は、ステータス情報の作成側としても、利用側としても動作する。 情報の作成側としては、システム状態を定期的に問い合わせ、 ネットワークにブロードキャストされるステータスメッセージを作成する。 情報の利用側としては、他の rwhod サーバのステータスメッセージを受け取り、確認した後、 /var/spool/rwho ディレクトリに作られたファイルに記録する。
サーバは、``rwho'' サービスの指定で指示されているポートを使って メッセージの送受信を行う。 services(5) を参照すること。
-b フラグが指定された場合、 イーサネットのようなブロードキャストインターフェースのみが使われる。 -p フラグが指定された場合、 point-to-point のインターフェースのみが使われる。 -a フラグが指定された場合、またはフラグが何も指定されない場合、 全てのインターフェースが使われる。
-u フラグが指定された場合、 rwhod は root ではなく指定されたユーザーとして実行される。
送受信されるメッセージは以下の形式である。
struct  outmp {
        char    out_line[8];            /* tty の名前 */
        char    out_name[8];            /* ユーザー ID */
        long    out_time;               /* 時間 */
};
struct  whod {
        char    wd_vers;
        char    wd_type;
        char    wd_fill[2];
        int     wd_sendtime;
        int     wd_recvtime;
        char    wd_hostname[32];
        int     wd_loadav[3];
        int     wd_boottime;
        struct  whoent {
                struct  outmp we_utmp;
                int     we_idle;
        } wd_we[1024 / sizeof (struct whoent)];
};
全てのフィールドは、送信の前にネットワークバイトオーダーに変換される。 平均負荷は w(1) プログラムによって計算され、 サーバが送信する前の 5, 10, 15 分間隔の平均負荷を表す。 平均負荷は 100 を掛けて整数で表される。 使用されるホスト名は、 gethostname(2) システムコールによって返されたもので、ドメイン名は省略される。 メッセージの最後の配列には、メッセージを送信したマシンにログインしている ユーザーの情報が含まれている。 この情報には、アイドルでない端末ラインの utmp(5) エントリと端末ラインから最後に文字が受信されてからの秒数が入っている。
rwho サーバに受信されるメッセージは、 rwho サーバのポートから送信されたものでなければ、破棄される。 さらに、メッセージ中で指定されたホスト名が表示できない ASCII 文字を含んでいる場合も、メッセージは破棄される。 rwhod に受信された有効なメッセージは、ディレクトリ /var/spool/rwho にある whod.hostname というファイルに入れられる。 これらのファイルには、 最新のメッセージのみが上で説明したフォーマットで格納されている。
ステータスメッセージは、約 3 分に 1 回作成される。 rwhod はシステムのブート時刻を 30 分毎に再計算する。 なぜなら、(Linux 以外の) システムの中には、 ブート時刻の計算が完全に信用のおけるプロセスではない システムも存在するためである。