cc [flags…] –I /usr/cluster/include file –L /usr/cluster/lib –l dsdev#include <rgm/libdsdev.h> scha_err_t scds_fm_net_connect(scds_handle_t handle, scds_socket_t *socklist, int count, scds_netaddr_t addr, time_t timeout);
scds_fm_net_connect() 関数は、モニター対象のプロセスとの 1 つまたは複数の TCP 接続を確立します。TCP 接続の数は、Port_list にある各アドレスのプロトコル値によって異なります (後述)。
scds_get_netaddr_list(3HA) を使用して、リソースのネットワークアドレスのリストを取得できます。この関数はまた、リスト内の各アドレスのプロトコル値を設定します。あるアドレスのプロトコルが tcp6 であると Port_list に指定されている場合、プロトコル値は SCDS_IPPROTO_TCP6 に設定されます。あるアドレスのプロトコルが tcp であると Port_list に指定されている場合、または Port_list にプロトコルが指定されていない場合、プロトコル値は SCDS_IPPROTO_TCP に設定されます。
この関数はまた、addr に指定された hostname を解決して、次のように接続します。
addr に指定されたプロトコルが SCDS_IPPROTO_TCP である場合、指定されたポートの hostname の IPv4 アドレスに接続します。
addr に指定されたプロトコルが SCDS_IPPROTO_TCP6 である場合、指定されたポートの hostname の IPv4 アドレスと IPv6 アドレスの両方 (それぞれ存在する場合のみ) に接続します。ステータスとファイル記述子は (利用できる場合のみ)、この関数に指定された scds_socket_t 配列に格納されます。この配列の 1 番目のメンバーは IPv4 マッピングに使用され、2 番目のメンバーは IPv6 用に使用されます。ステータスに設定できる値は、次のいずれかです。
SCDS_FMSOCK_OK — 操作は成功しました。関連するソケットファイル記述子は有効です。
SCDS_FMSOCK_NA — この hostname には、アドレスの種類 (IPv4 または IPv6) が適用されません。hostname に 1 つまたは複数の IPv4 マッピングしかない場合、この関数に指定された配列の 2 番目のメンバーのステータスは SCDS_FMSOCK_NA に設定されます。関連するソケットファイル記述子は未知の値に設定されるため、絶対に使用できません。
SCDS_FMSOCK_ERR — 操作は失敗またはタイムアウトしました。関連するソケットファイル記述子は未知の値に設定されるため、絶対に使用できません。
次のパラメータがサポートされます。
scds_initialize(3HA) から返されるハンドルです。
メンバー SCDS_MAX_IPADDR_TYPES から構成される型 scds_socket_t の配列です。配列内の各メンバーは、TCP 接続のステータスとソケットファイル記述子を保持します。このパラメータは、この関数が設定する出力引数です。
socklist 配列のメンバー数です。このパラメータは SCDS_MAX_IPADDR_TYPES に設定します。
プロセスが待機する場所を指定する hostname、TCP ポート番号、およびプロトコル識別子です。
タイムアウト値 (秒) です。各ソケットはこれと同じ時間をタイムアウトとして使用して、接続を確立しようとします。これらの時間は並行に進行するため、この値は事実上、関数の実行にかかる最大時間となります。
scds_fm_net_connect() 関数の戻り値は次のとおりです。
関数の実行に成功。少なくとも 1 つのソケットが接続されました。
この関数は無効なパラメータを使用して呼び出されました。
タイムアウトや接続の拒否などのエラーのため、接続は確立されていません。エラーを正確に判断するには、socklist 配列のすべてのメンバーについて、status フィールドが SCDS_FMSOCK_ERR に設定されているかどうかを調査します。
関数が正常に終了。
関数の実行中に内部エラーが発生したことを示します。
サーバーが接続要求を拒否したことを示します。
接続要求がタイムアウトしたことを示します。
/* this function is called repeatedly, 
   after thorough_probe_interval seconds */
int probe(scds_handle_t scds_handle, ...)
{
	scds_socket_t socklist[SCDS_MAX_IPADDR_TYPES];
	...
	/* for each hostname/port/proto */
	for (i = 0; i < netaddr->num_netaddrs, i++) {
		if (scds_fm_net_connect(scds_handle, socklist,
		    SCDS_MAX_IPADDR_TYPES, netaddr[i], timeout) !=
		    SCHA_ERR_NOERR)
			{
				/* failed completely */
				...
		} else {
			/* at least one sock connected */
			for (j = 0, j < SCDS_MAX_IPADDR_TYPES, j++) {
				if (socklist[j].status == SCDS_FM_SOCK_NA)
					continue;
				if (socklist[j].status == SCDS_FMSOCK_ERR) {
					/* this particular connection failed */
					scds_syslog(LOG_ERR, "Failed: %s",
					    scds_error_string(socklist[j].err));
					continue;
				}
				/* use socklist[i].fd to perform write/read */
				...
			}
			(void) scds_fm_net_disconnect(scds_handle, socklist,
			    SCDS_MAX_IPADDR_TYPES, remaining_time);
		}
		
	}
	...
	return (result);
}
		
	
	インクルードファイル
ライブラリ
次の属性については、attributes(5) を参照してください。
  | 
scds_fm_net_disconnect(3HA), scds_fm_tcp_connect(3HA), scds_get_netaddr_list(3HA), scds_initialize(3HA), scha_calls(3HA), attributes(5)