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 以外の) システムの中には、 ブート時刻の計算が完全に信用のおけるプロセスではない システムも存在するためである。