Fn rcmd 関数は gethostbyname(3) を使用してホスト Fa *ahost を調べ、ホストが存在しない場合は -1 を返します。 ホストが存在する場合は、ホストの標準名に Fa *ahost を設定し、よく知られているインターネットポート Fa inport に存在するサーバとの接続を確立します。
接続が確立されると、タイプ SOCK_STREAM のインターネットドメインのソケットが呼び出し側に返され、また stdin と stdout としてリモートコマンドに渡されます。 Fa fd2p が 0 以外である場合は、制御プロセスへ追加のチャンネルが設定され、 その記述子が Fa *fd2p に収められます。 制御プロセスは、このチャンネルでコマンド (ユニット 2) からの診断出力を返し、 また UNIX シグナル番号としてこのチャンネルのバイトを受け取って、 コマンドのプロセスグループに転送します。 Fa fd2p が 0 である場合は、 stderr (リモートコマンドのユニット 2) が stdout と同じように作成されます。 任意のシグナルをリモートプロセスに送信する準備はされませんが、 バンド外のデータを使用することでリモートプロセスの注目を得ることはできます。
プロトコルの詳細については、 rshd(8) を参照してください。
Fn rresvport 関数は、特権インターネットポートを持つアドレスに結び付いたソケットを 入手するのに使います。 このソケットは、 Fn rcmd やその他いくつかの関数での使用に適しています。 特権インターネットポートは、 0 から 1023 の範囲にあるものです。 この種のアドレスをソケットに結合できるのはスーパユーザのみです。
Fn iruserok 関数と Fn ruserok 関数は、 gethostbyname(3) ルーチンが返すリモートホストの IP アドレスか名前、2 つのユーザ名、 そしてローカルユーザの名前がスーパユーザの名前であるかどうかを示すフラグを 引数にとります。 ユーザがスーパユーザ でない 場合は、 /etc/hosts.equiv ファイルをチェックします。 この検索が実行されなかった場合、またはこの検索が成功しなかった場合は、 ローカルユーザのホームディレクトリの .rhosts をチェックし、サービスへの要求が許可されているかどうかを確認します。
このファイルが存在しない場合や通常のファイルでない場合、またはユーザや スーパユーザ以外がこのファイルの所有者である場合、あるいは所有者以外がこの ファイルに書き込める場合、チェックは自動的にエラーとなります。 マシン名が ``hosts.equiv '' ファイルにリストされている場合、またはホストとリモートユーザ名が ``.rhosts '' ファイルに存在する場合は 0 が返されます。 その他の場合、 Fn iruserok と Fn ruserok は -1 を返します。 gethostname(3) で入手したローカルドメインがリモートドメインと同じである場合は、 マシン名のみを指定する必要があります。
Fn iruserok 関数は、セキュリティ上の理由で強く推奨されます。 Fn ruserok 関数は DNS 全体を信用する必要があり、侵害される可能性がありますが、 Fn iruserok はせいぜいローカル DNS を信頼する必要しかありません。
``_af '' や ``_sa '' といった接尾辞のついた関数、たとえば Fn rcmd_af , Fn rresvport_af や Fn iruserok_sa などは、IPv6 と IPv4 ポートを扱えることを除いて、 対応する接尾辞のない関数と同じ動作をします。
``_af '' 接尾辞は、アドレスファミリ (下記参照) を指定するために使われる Fa af 引数が加わっていることを意味しています。 Fa af 引数の拡張は、バイナリアドレス引数を持たない関数に対して実装されています。 バイナリアドレスの代わりに Fa af 引数はどのアドレスファミリが必要かを指定します。
``_sa '' 接尾辞は、関数が汎用ソケットアドレスと長さを 引数に持っていることを意味しています。 ソケットアドレスはプロトコルに依存しないデータ構造なので、 必要に応じて IPv4 と IPv6 のソケットアドレスを渡すことができます。 Fa sa 引数の拡張は、プロトコルに依存したバイナリアドレス引数を渡す関数に対して 実装されています。 引数は、汎用的な方法でいくつものアドレスファミリをサポートするように、 更に汎用的なアドレス構造に置き換えられる必要があります。
``_af '' 接尾辞も ``_sa '' 接尾辞もついていない関数は、IPv6 と IPv4 の両方とも扱える Fn ruserok 関数を除いて、IPv4 のみで動作します。 アドレスファミリを切替えるには、 Fa af 引数に AF_INET もしくは AF_INET6 を設定しなければなりません。 Fn rcmd_af に対しては、 PF_UNSPEC も許されます。
成功した場合、 Fn rresvport 関数は有効で結合したソケット記述子を返します。 エラーが発生した場合は -1 を返し、エラーの原因に従ってグローバル変数 errno が設定されます。 「すべてのネットワークポートが使用されている」ことを示す場合は、 エラーコード Er EAGAIN がオーバロードされます。