Oracle® Solaris Cluster リファレンスマニュアル

印刷ビューの終了

更新: 2014 年 7 月、E51742-01
 
 

scds_fm_net_connect (3HA)

名前

scds_fm_net_connect - アプリケーションとの TCP 接続の確立

形式

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 — 操作は失敗またはタイムアウトしました。関連するソケットファイル記述子は未知の値に設定されるため、絶対に使用できません。

パラメータ

次のパラメータがサポートされます。

handle

scds_initialize(3HA) から返されるハンドルです。

socklist

メンバー SCDS_MAX_IPADDR_TYPES から構成される型 scds_socket_t の配列です。配列内の各メンバーは、TCP 接続のステータスとソケットファイル記述子を保持します。このパラメータは、この関数が設定する出力引数です。

count

socklist 配列のメンバー数です。このパラメータは SCDS_MAX_IPADDR_TYPES に設定します。

addr

プロセスが待機する場所を指定する hostname、TCP ポート番号、およびプロトコル識別子です。

timeout

タイムアウト値 (秒) です。各ソケットはこれと同じ時間をタイムアウトとして使用して、接続を確立しようとします。これらの時間は並行に進行するため、この値は事実上、関数の実行にかかる最大時間となります。

戻り値

scds_fm_net_connect() 関数の戻り値は次のとおりです。

0

関数の実行に成功。少なくとも 1 つのソケットが接続されました。

SCHA_ERR_INVAL

この関数は無効なパラメータを使用して呼び出されました。

0 以外

タイムアウトや接続の拒否などのエラーのため、接続は確立されていません。エラーを正確に判断するには、socklist 配列のすべてのメンバーについて、status フィールドが SCDS_FMSOCK_ERR に設定されているかどうかを調査します。

エラー

SCHA_ERR_NOERR

関数が正常に終了。

SCHA_ERR_INTERNAL

関数の実行中に内部エラーが発生したことを示します。

SCHA_ERR_STATE

サーバーが接続要求を拒否したことを示します。

SCHA_ERR_TIMEOUT

接続要求がタイムアウトしたことを示します。

使用例 1 scds_fm_net_connect() 関数の使用法

/* 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);
}

ファイル

/usr/cluster/include/rgm/libdsdev.h

インクルードファイル

/usr/cluster/lib/libdsdev.so

ライブラリ

属性

次の属性については、attributes(5) を参照してください。

属性タイプ
属性値
使用条件
ha-cluster/developer/api
インタフェースの安定性
発展中

関連項目

scds_fm_net_disconnect(3HA), scds_fm_tcp_connect(3HA), scds_get_netaddr_list(3HA), scds_initialize(3HA), scha_calls(3HA), attributes(5)