Netcompo WAN制御 説明書 |
目次
![]() ![]() |
ここでは、拡張TLI(HDLC-TLI/X.25-TLI)に関するマニュアル・ページを記述します。
getnetconfig(3N) getnetconfig(3N)
setnetconfig,getnetconfig,endnetconfig,getnetconfigent,freenetconfigent,nc_perror,nc_sperror− ネットワーク構成データベース・エントリの入手
#include <netconfig.h>
void *setnetconfig( void );
struct netconfig *getnetconfig( void *handlep );
int endnetconfig( void *handlep );
struct netconfig *getnetconfigent( const char *netid );
void freenetconfigent( struct netconfig *netconfigp );
void nc_perror( const char *msg );
char *nc_sperror( void );
このページで説明する7つのライブラリ・ルーチンは、ネットワーク選択構成要素の一部です。これは、システム・ネットワーク構成データベース/etc/netconfigへのアプリケーション・アクセスを提供します。ネットワーク選択には、netconfigデータベースとそれにアクセスするルーチンの他に、環境変数NETPATHおよびgetnetpath(3N)で説明するNETPATHアクセス・ルーチンがあります(environ(5)を参照)。
setnetconfigの呼出しは、netconfigデータベースをgetnetconfigで使用可能にし、先頭のエントリにhandlepを位置付けます。setnetconfigの呼び出しは、getnetconfigへの最初の呼出しに先だって行わなければなりません。setnetconfigは、getnetconfigentを呼ぶ前に呼び出される必要はありません。setnetconfigは、getnetconfig( )が使用する単一のハンドルを返します。エラーが発生した場合、setnetconfigはNULLを返します。
getnetconfigは、netconfig構造体として形式化されたnetconfigデータベースの現在のhandlepによってポイントされるポインタを返し、handlepを、次のエントリをポイントするように更新します。
getnetconfigは、このように/etc/netconfigファイル全体を探索するのに使用することができます。
getnetconfigは、handlepがデータベースの最後をポイントしている場合はNULLを返します。
endnetconfigは、処理が完了したときに呼び出され、資源を再利用できるように解放します。しかしendnetconfigは、getnetconfigによってnetconfigデータ構造体に割り当てられたメモリの全てを解放するので、プログラマの方は注意してください。endnetconfigは、setnetconfigの前には呼び出せません。endnetconfigは、成功した時は0を返し、失敗すると(例えば、setnetconfigが前もって呼び出されていない場合など)は-1を返します。
getnetconfigentは、netidに対応するnetconfig構造体へのポインタを返します。netidが無効な場合(例えば、netconfigデータベース内のエントリを指名していない場合など)には、NULLを返します。
freenetconfigent(netconfigp)は、(前もってgetnetconfigentによって返された)netconfigpが指すnetconfig構造体を解放します。
nc_perrorは、上にあげたルーチンが失敗した時の理由を示すエラー・メッセージを標準エラー出力に出力します。メッセージは、msg文字列とコロンが前に付加され、改行がメッセージの最後に追加されます。
nc_sperrorは、nc_perrorに類似していますが、標準エラー出力にメッセージを出力するかわりに、メッセージのポインタを返します。
nc_perrorとnc_sperrorは、getnetpath(3N)で説明されているNETPATHアクセス・ルーチンにおいても使用することができます。
getnetpath(3N),netconfig(4),environ(5)
getnetpath(3N) getnetpath(3N)
setnetpath,getnetpath,endnetpath - NETPATH構成要素に対応するnetconfigエントリの獲得
#include <netconfig.h>
void *setnetpath( void );
struct netconfig *getnetpath( void *handlep );
int endnetpath( void *handlep );
このページで説明する3つのルーチンは、ネットワーク選択構成要素の一部です。これはアプリケーションに、システム・ネットワーク構成データベース/etc/netconfigへのアクセスを、NETPATH環境変数によって指定された通りに提供します(environ(5)を参照)。ネットワーク選択には、直接ネットワーク構成データベースにアクセスするルーチンも含まれています(getnetconfig(3N)を参照)。
setnetpathの呼出しは、NETPATHをgetnetpathで使用可能にし、先頭のエントリにhandlepを位置付けます。setnetpathは、getnetpathの最初の呼出し前に先だって呼び出される必要があり、getnetpathが使用するハンドルを返します。netconfigデータベースが存在しない場合には、setnetpathは失敗します。NETPATHが設定されていない場合、/etc/netconfigファイル内の“可視"ネットワークの集合がsetnetpathによって使用される、デフォルトのNETPATH構成要素となります。エラーが発生した場合、setnetpathはNULLを返します。
getnetpathは、最初の有効なNETPATH構成要素に対応する、netconfigデータベース・エントリへのhandlepによってポイントされるポインタを返します。netconfigエントリは、struct netconfigとして形式化されています。その後の呼び出しの度に、getnetpathは次の有効なNETPATH構成要素に対応する、netconfigエントリへのポインタを返します。getnetpath呼出しは、このようにnetconfigデータベースを検索してNETPATH変数に含まれるネットワークをすべて検索するのに使用されます。NETPATHがなくなったとき、getnetpathはNULLを返します。
getnetpathは、無効なNETPATH構成要素が指定された場合、無視します。netconfigデータベースに対応するエントリがない場合は、NETPATH構成要素は無効となります。
NETPATH変数が設定されていない場合、getnetpathは、NETPATHがnetconfigデータベース内でリストされている順序で“省略時設定”または“可視”のネットワークのシーケンスに設定されているかのように動作します。
endnetpathは、処理が完了した時に、資源を再利用できるように解放します。しかしendnetpathは、setnetpathが割り当てたすべてのメモリを解放するので、プログラマの方は注意してください。endnetpathは、成功すると0を返し、失敗すると(例えば、setnetpathが前もって呼び出されていない場合など)-1を返します。
getnetconfig(3N),netconfig(4),environ(5)
netdir(3N) netdir(3N)
netdir_getbyname,netdir_getbyaddr,netdir_free,netdir_options,netdir_perror,netdir_sperror - 汎用トランスポート・ネーム・トゥ・アドレス変換
#include <netdir.h>
int netdir_getbyname(const struct netconfig *config, const struct nd_hostserv *service, struct nd_addrlist **addrs);
int netdir_getbyaddr(const struct netconfig *config, struct nd_hostservlist **service, const struct netbuf *netaddr);
void netdir_free(void *ptr, const int ident);
int netdir_options(const struct netconfig *netconfig, const int option, const int fd, char *pointer_to_args);
void netdir_perror(char *s);
char *netdir_sperror(void);
これらのルーチンは、すべてのトランスポート・プロトコルと連係して動作するネーム・トゥ・アドレス・マッピング用の、汎用インタフェースを提供します。このインタフェースは、トランスポート・プロバイダに固有のアドレスから共通構造体への変換およびその逆変換を行う汎用的な方法をプログラムに提供します。
netdir_getbynameルーチンは、nd_hostserv構造体のマシン名およびサービス名を、netconfig構造体で識別されるトランスポート・プロバイダが、理解するタイプのアドレスの集合にマップします。このルーチンは、トランスポート・プロバイダに有効なすべてのアドレスを、nd_addrlist構造体で返します。netconfig構造体は、netconfig(4)マニュアルページで説明されています。nd_hostserv構造体のすべてのフィールドは、初期設定しなければなりません。nd_hostserv構造体およびnd_addrlist構造体には下記の要素があります。
struct nd_addrlist { int n_cnt; /* number of netbufs */ struct netbuf *n_addrs; /* the netbufs */ };
struct nd_hostserv { char *h_host; /* the host name */ char *h_serv; /* the service name */ };
netdir_getbynameは、いくつかの特殊ホスト名を受け入れます。これらのホスト名は、要求の意図を定義する基礎的マッピング・ルーチンに関する手がかりです。この情報は、トランスポート・プロバイダの開発者が呼出し側に正しい情報を提供するために要求されます。ホスト名は<netdir.h>で定義されます。現在定義されているホスト名は以下の通りです。
HOST_ANY このトランスポート・プロバイダがアクセス可能なホストを、どれでも表します。
HOST_ANYを使うことによって、アプリケーションが特定のホスト名を指定しなくて
も、必要なサービスを指定することができます。
HOST_SELF (X.25-TLI,HDLC-TLIではサポートしません。)
HOST_SELF_CONNECT (X.25-TLI,HDLC-TLIではサポートしません。)
HOST_BROADCAST (X.25-TLI,HDLC-TLIではサポートしません。)
すべての使用可能なトランスポート・プロバイダを見つけるには、getnetconfig(3N)で返されたそれぞれのnetconfig構造体でnetdir_getbynameルーチンを呼び出します。
netdir_getbyaddrルーチンは、サービス名のアドレスをマップします。このルーチンは、ホストとサービスの組のリストを返します。返されたホストおよびサービス名の組合せが複数ならば、最初の組合せが優先度の高いホストおよびサービスの名前です。nd_hostservlist構造体には、以下のメンバが含まれます。
struct nd_hostservlist { int h_cnt; /* number of nd_hostservs */ struct nd_hostserv *h_hostservs; /* the entries */ };
netdir_freeは、ネーム・トゥ・アドレス・マッピング・ルーチンが割り当てた構造体を解放します。ptrは解放する構造体を指します。解放する構造体のタイプは、ident引数によって下記の値を指定できます。
ND_ADDR netbuf構造体を解放します。
ND_ADDRLIST netdir_getbynameが割り当てたnd_addrlist構造体を解放します。
ND_HOSTSERV nd_hostserv構造体を解放します。
ND_HOSTSERVLIST nedir_getbyaddrが割り当てたnd_hostservlist構造体を解放します。
netdir_optionsルーチンは、netconfigが指定したトランスポート・プロバイダに対して、トランスポート・プロバイダ固有のオプションを渡すために使用されます。
トランスポート・プロバイダがオプションをサポートしない場合、netdir_optionsは-1を返します。netdir_perrorかnetdir_sperrorを使用することにより、エラー・メッセージを出力することができます。
各オプションに固有のアクションは以下のとおりです。
ND_SET_BROADCAST(X.25-TLI,HDLC-TLIではサポートしません)
ND_SET_RESERVEDPORT(X.25-TLI,HDLC-TLIではサポートしません)
ND_CHECK_RESERVEDPORT(X.25-TLI,HDLC-TLIではサポートしません)
ND_MERGEADDR(X.25-TLI,HDLC-TLIではサポートしません)
ND_GET_PARM
指定されたオプション名に対応する、通信パス単位の制御情報(/etc/opt/FJSVwan/etc/transport/options)をプロバイダが認識できる形式に変換し、netbuf構造体形式にて通知します。fdは使用しません。pointer_to_argsには、以下に示すpar_options構造体へのポインタを設定します。struct par_options { char *optname; /* the option name */ struct netbuf *netbuf; /* the netbufs */ };
optnameは、関数呼び出し時にオプション名を指定します。netbufは、関数が正常終了した時にはnetbuf構造体のポインタが設定され、異常時は不定値が設定されます。
netdir_perrorルーチンは、ネーム・トゥ・アドレス・マッピング・ルーチンのどれかが異常終了した理由を記述するエラー・メッセージを、標準出力に出力します。エラー・メッセージの前に、引数として指定された文字列が付加されます。
netdir_sperrorルーチンは、ネーム・トゥ・アドレス・マッピング・ルーチンのどれかが異常終了した理由を記述するエラー・メッセージを含む文字列を返します。
getnetconfig(3N),getnetpath(3N),netconfig(4)
t_accept(3N) t_accept(3N)
t_accept−接続要求の受け付け
#include <tiuser.h>
int t_accept(int fd, int resfd, struct t_call *call)
この関数は、接続要求を受付けるために、トランスポート・ユーザが使用します。fdは接続指示が到着したローカル・トランスポート・エンドポイントを識別し、resfdは接続が行われるべきローカル・トランスポート・エンドポイントを指定します。そしてcallには、トランスポート・プロバイダが接続を完了するために必要な情報が記載されます。callは、以下のメンバを含むt_call構造体を示します。
struct t_call { struct netbuf addr; /* address */ struct netbuf opt; /* options */ struct netbuf udata; /* user data */ int sequence; /* sequence number */ };
callにおいて、addrは呼び出し元のアドレスであり、optは接続に関連するプロトコル固有のパラメタを示し、udataは呼出し元に返されるべきユーザ・データを示します。そしてsequenceは、前に受信した接続指示の応答に一意に関連付ける、t_listen(3N)によって返される値です。
トランスポート・ユーザは、接続指示が到着したエンドポイントと同じローカル・トランスポート・エンドポイントまたは別のローカル・トランスポート・エンドポイントのどちらの接続でも受け付けます。同じエンドポイントが指定された場合(すなわち、resfdとfdが等しい場合)、接続は、“ユーザはそのエンドポイントで別の指示を受信したけれども、それらに対してt_acceptまたはt_snddis(3N)で応答していない”の条件が真でない限り、受け付けられます。この条件でt_acceptはエラーとなり、t_errnoにTBADFを設定します。
別のエンドポイントが指定された場合(resfdとfdが等しくない場合)、そのエンドポイントはプロトコル・アドレスとバインドされていなければならず、t_acceptが出される前にT_IDLE状態(t_getstate(3N)を参照)になっていなければなりません。
HDLC-TLIでは、別のエンドポイントを指定された場合(resfdとfdが等しくない場合)は、t_acceptはエラーとなり、t_errnoにTBADSEQを設定します。
どちらのタイプのエンドポイントの場合にも、そのエンドポイントで受信されるのを待っている指示(例えば、接続か切断)がある場合には、t_acceptはエラーとなり、t_errnoにTLOOKを設定します。
optによって指定されるパラメタの値、およびそれらの値の構文は、プロトコル固有のものです。udata引数は、呼び出されたトランスポート・ユーザがユーザ・データを呼出し元に送信することを可能にし、ユーザ・データの量は、t_open(3N)またはt_getinfo(3N)のinfo引数のconnectフィールド内に返されたトランスポート・プロバイダによってサポートされる限界を超えてはなりません。udataのlenフィールドが0の場合には、呼出し元にデータは送信されません。HDLC-TLIでは、opt,udataはサポートされません。
エラーの場合、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子がトランスポート・エンドポイントを示していないか、または、ユーザが、接続指示が到着したのと同じトランスポート・エンドポイント上の接続を誤って受け付けています。
[TOUTSTATE] 関数が、fdによって参照されるトランスポート・エンドポイント上の誤ったシーケンスで出されたか、または、resfdで示されたトランスポート・エンドポイントがT_IDLE状態になっていません。
[TACCES] ユーザは、応答しているトランスポート・エンドポイント上の接続を受け付ける許可、または指定されたオプションを使用する許可を得ていません。
[TBADOPT] 指定されたオプションのフォーマットが正しくないか、または、誤った情報を含んでいます。
[TBADDATA] 指定されたユーザ・データの量が、トランスポート・プロバイダによって許可された範囲内に入っていません。
[TBADSEQ] 無効なシーケンス番号が指定されました。
[TLOOK] fdによって参照されたトランスポート・エンドポイント上に非同期イベントが生じ、速やかな注意が必要です。
[TNOTSUPPORT] この関数は、下にあるトランスポート・プロバイダがサポートしていません。
[TSYSERR] この関数の実行中に、システム・エラーが生じました。
[TBADADDR] 指定されたプロトコル・アドレスのフォーマットが正しくないか、誤った情報を含んでいます。
t_connect(3N),t_getinfo(3N),t_getstate(3N),t_listen(3N),t_open(3N),t_rcvconnect(3N),
t_snddis(3N)
正常終了時には0を返します。異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_alloc(3N) t_alloc(3N)
t_alloc−ライブラリ構造の割当て
#include <tiuser.h>
char *t_alloc(int fd, int struct_type, int fields)
t_alloc関数は、以下に指定するように、種々のトランスポート関数の引数に設定する構造体に対して、メモリを動的に割り当てます。この関数は、指定された構造体に対してメモリを割り当て、構造体によって参照されるバッファに対しても、メモリを割り当てます。
割り当てる構造体はstruct_typeによって指定され、以下のうちの1つでなければなりません。
T_BIND struct t_bind
T_CALL struct t_call
T_OPTMGMT struct t_optmgmt
T_DIS struct t_discon
T_UDERROR struct t_uderr
T_INFO struct t_info
これらの構造体は、後に1つ以上のトランスポート関数に対する引数として、使用することができます。T_INFOを除いて、上記の各構造体は、netbuf構造体タイプのフィールドを少なくとも1つ含んでいます。このタイプの各フィールドについて、ユーザは、そのフィールドのバッファが同様に割り当てられるように指定することができます。fields引数は、このオプションを指定します。ここで引数は、以下のうちのいくつかのビット単位の論理和です。
T_ADDR t_bind,t_callまたはt_uderr構造体のaddrフィールド。
T_OPT t_optmgmt,t_callまたはt_uderr構造体のoptフィールド。
T_UDATA t_callまたはt_discon構造体のudataフィールド。
T_ALL 与えられた構造体のすべての関連フィールド。
fdで指定されたトランスポート・プロバイダによってサポートされないフィールドは、
割り当てられません。
fields内に指定された各フィールドについて、t_allocはそのフィールドに関連するバッファに対するメモリを割り当て、それに従って、bufポインタ、およびmaxlenフィールドを初期化します。関連しない、または不明の値がfieldsに渡された場合は無視されます。割り当てられたバッファの長さは、t_open(3N)およびt_getinfo(3N)でユーザに返された同じサイズの情報に基づいています。したがって、適切なサイズの情報をアクセスできるように、fdは新しく割り当てられた構造体が経由して引き渡されるトランスポート・エンドポイントを示さなければなりません。指定されたフィールドに関連するサイズ値が-1である場合(t_open(3N)またはt_getinfo(3N)を参照)、t_allocはデフォルトのサイズ1024バイトでバッファを割り当てます。また、指定されたフィールドに関連するサイズ値が-2である場合、t_allocはバッファのポインタにNULL、バッファの最大サイズに0を設定し、正常終了します。fieldsに指定されていないすべてのフィールドについては、bufはNULLに設定され、maxlenはゼロに設定されます。
t_allocを使用して構造体を割り当てると、ユーザ・プログラムとトランスポート・インタフェースの互換性が確実になります。
エラーの場合には、以下のうちの1つがt_errnoに設定されます。
[TBADF] struct_typeがT_INFO以外で、指定されたファイル記述子がトランスポート・エンドポイントを示していません。
[TSYSERR] この関数の実行中に、システム・エラーが生じました。
t_free(3N),t_getinfo(3N),t_open(3N)
t_allocは、正常終了時には、新たに割り当てられた構造体に対するポインタを返します。異常終了時には、NULLを返します。
t_bind(3N) t_bind(3N)
t_bind−トランスポート・エンドポイントに対するアドレスのバインド
#include <tiuser.h>
int t_bind(int fd, struct t_bind *req, struct t_bind *ret)
この関数は、プロトコル・アドレスを、fdによって指定されたトランスポート・エンドポイントと関係付け、そのトランスポート・エンドポイントを活性化します。コネクション・モードでは、トランスポート・プロバイダは、トランスポート・エンドポイント上の接続の受付または、要求を開始することができます。reqおよびret引数は、以下のメンバを含むt_bind構造体を指します。
struct t_bind { struct netbuf addr; unsigned int qlen; };
t_bind構造体のaddrフィールドは、プロトコル・アドレスを指定し、qlenフィールドは、未処理の接続指示の最大数(受付処理を行っていない接続指示をプロバイダが保留可能な最大数)を示すために使用します。
reqは、netbuf構造体によって表されるアドレスが、与えられたトランスポート・エンドポイントにバインドされることを要求するために使用します。lenはアドレス内のバイト数を指定し、bufはアドレスバッファを指します。maxlenは、req引数に対しては何も意味がありません。ret内には、ユーザはアドレス・バッファの最大長maxlenと、アドレスが配置されるバッファを指すbufを指定します。復帰時、lenにはバインドされたアドレスのバイト数が設定され、bufはバインドされたアドレスを指します。もし、maxlenに0またはアドレスの長さよりも小さい値が設定された場合、t_bindはt_errnoにTBUFOVFLWを設定してエラー終了します。また、要求したアドレスが使用できない場合、t_bindは-1で返り、t_errnoには適切な値が設定されます。X.25-TLI、HDLC-TLIでは、関数復帰時にretで返されるアドレスは、reqの値がそのまま返され、何も意味を持ちません。
ユーザがバインドするアドレスを指定したくない場合、reqはNULLとすることができます。ここで、qlenの値はゼロと仮定し、トランスポート・プロバイダはトランスポート・エンドポイントに対してアドレスを割り当てなければなりません。
qlenフィールドは、コネクション・モード・サービスを初期化するときにのみ意味を持ちます。これは、トランスポート・プロバイダが、与えられたトランスポート・エンドポイントに対してサポートすべき未処理の接続指示の数を指定します。未処理の接続指示は、トランスポート・プロバイダがトランスポート・ユーザに対して引き渡したものです。0より大きいqlenの値は、他のユーザがそれを呼び出すことを期待しているサーバ側のユーザが出したときにのみ意味を持ちます。qlenの値は、トランスポート・プロバイダが処理することができ、トランスポート・プロバイダが指定された未処理の接続指示数をサポートすることができない場合、変更することができます。復帰時、retのqlenフィールドに、処理された値が記載されます。
この関数は、2つ以上のトランスポート・エンドポイントが、同一のプロトコル・アドレスにバインドされることを許しています(トランスポート・プロバイダは、この能力をサポートしなければなりませんが)。しかし、2つ以上のプロトコル・アドレスを、同一のトランスポート・エンドポイントにバインドすることはできません。ユーザが2つ以上のトランスポート・エンドポイントを同一のプロトコル・アドレスにバインドした場合、そのプロトコル・アドレスに関係する接続指示を受入れるために、1つのエンドポイントだけを使うことができます。言い換えれば、与えられたプロトコル・アドレスに対する1つのt_bindだけが、0より大きいqlenの値を指定することができます。このように、トランスポート・プロバイダは、どのトランスポート・エンドポイントに着信の接続指示を受けるべきかを識別することができます。
ユーザがプロトコル・アドレスを2番目のトランスポート・エンドポイントに0より大きいqlenの値でバインドしようとした場合、トランスポート・プロバイダは、そのエンドポイントにバインドするべき別のアドレスを割り当てます。ユーザが受付待ち用エンドポイントとして使用されているトランスポート・エンドポイント上の接続を受け付けた場合、バインドされたプロトコル・アドレスは、その接続の期間中ビジーとなっています。その受付待ち用エンドポイントがデータ転送フェーズである間、受付待ち用のために別のトランスポート・エンドポイントがバインドされることはありません。このことよって、同一のプロトコル・アドレスにバインドされた2つ以上のトランスポート・エンドポイントが、接続の指示を受付けることを防止します。
エラー時には、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子がトランスポート・エンドポイントを示していません。
[TOUTSTATE] 関数が、誤ったシーケンスで出されました。
[TBADADDR] 指定されたプロトコルアドレスのフォーマットが正しくないか、または、誤った情報を含んでいます。
[TNOADDR] トランスポート・プロバイダがアドレスを割り当てることができませんでした。
[TACCES] ユーザが、指定されたアドレスを使用する許可を得ていません。
[TBUFOVFLW] 入力引数(maxlen)として与えられたバイト数が0であるか、その引数の値を格納するためには不十分です。プロバイダの状態はT_IDLEに変わり、retで返されるべき情報は廃棄されます。
[TSYSERR] この関数の実行中に、システム・エラーが生じました。
t_open(3N),t_optmgmt(3N),t_unbind(3N)
t_bindは、正常終了時には0を返します。異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_close(3N) t_close(3N)
t_close−トランスポート・エンドポイントのクローズ
#include <tiuser.h>
int t_close(int fd)
t_close関数は、ユーザがfdによって指定されるトランスポート・エンドポイントについて終了したことをトランスポート・プロバイダに知らせ、そのエンドポイントに関連するローカル・ライブラリ資源を解放します。さらにt_closeは、トランスポート・エンドポイントと関連するファイルをクローズします。
t_closeは、T_UNBND状態(t_getstate(3N)を参照)から呼び出すこととします。しかし、この関数は状態情報をチェックしないので、トランスポート・エンドポイントをクローズするために、すべての状態から呼び出すことができます。そのようなことが生じた場合、エンドポイントと関連するローカル・ライブラリ資源は、自動的に解放されます。さらに、このプロセスまたは、その通信エンドポイントを参照する別のプロセスで、他にファイル記述子が存在しない場合、そのファイル記述子に対してclose(2)が発行され、エンドポイントと関連する接続はブレークされます。
接続エンドポイントに発行されたt_closeは、前に送信したデータや、まだ受信していないデータを失う原因となります。相手ユーザによってデータが受信されるのを保証することは、トランスポート・ユーザの責任です。
エラーの場合には、t_errnoに以下のものが設定されます。
[TBADF] 指定されたファイル記述子がトランスポート・エンドポイントを示していません。
[TSYSERR] この関数の実行中に、システム・エラーが生じました。
close(2),t_getstate(3N),t_open(3N),t_unbind(3N)
t_closeは、正常終了時には0を返します。異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_connect(3N) t_connect(3N)
t_connect−別のトランスポート・ユーザとの接続の確立
#include <tiuser.h>
int t_connect(int fd, struct t_call *sndcall, struct t_call *rcvcall)
この関数により、トランスポート・ユーザは指定された相手トランスポート・ユーザへの接続を要求することができます。この関数は、T_IDLE状態(t_getstate(3N)を参照)でのみ発行することができます。fdは接続が行われるローカル・トランスポート・エンドポイントを識別し、sndcallおよびrcvcallは、以下のメンバを含むt_call構造体を指します。
struct t_call { struct netbuf addr; /* address */ struct netbuf opt; /* options */ struct netbuf udata; /* user data */ int sequence; /* sequence number */ };
sndcallは、トランスポート・プロバイダが接続を行うために必要とする情報を指定します。rcvcallは、新たに行われた接続に関連する情報を指定します。
sndcallにおいて、addrは相手トランスポート・ユーザのプロトコル・アドレスを指定し、optはトランスポート・プロバイダが必要とするであろうプロトコル固有の情報を示し、udataは接続の実行中に相手トランスポート・ユーザに引き渡されるであろうユーザ・データを指します。sequenceは、この関数では意味がありません。
rcvcallのリターンで、addrは応答トランスポート・エンドポイントと関連するプロトコル・アドレスを返し、optはその接続と関連するプロトコル固有の情報を示し、udataは接続の実行中に相手トランスポート・ユーザが返すであろうオプションのユーザ・データを指します。sequenceは、この関数では意味がありません。
opt引数は、トランスポート・プロバイダに引き渡されるオプションの構造体について、何も示しません。トランスポート・プロバイダは、引き渡されるオプションのすべてについて、構造体を自由に指定することができます。これらのオプションは、トランスポート・プロバイダの下にあるプロトコルに固有のものです。ユーザは、optのlenフィールドをゼロに設定して、プロトコル・オプションを処理しないことを選択することができます。この場合、プロバイダはデフォルトのオプションを使用することができます。オプションを使用する場合は、sndcall->opt.bufはオプションに対応するバッファを指していなければならず、sndcall->opt.lenにはその長さを指定しなければなりません。また、rcvcall->addrとrcvcall->optによって指されたnetbuf構造体のmaxlenとbufフィールドは、呼び出す前に設定しなければなりません。
udata引数は、接続の実行中に、呼出し元がユーザ・データを相手トランスポート・ユーザに引き渡し、相手ユーザからユーザ・データを受信することを可能にします。しかしユーザ・データの量は、t_open(3N)、またはt_getinfo(3N)のinfo引数のconnectフィールド内に返される、トランスポート・プロバイダがサポートする限界を超えてはいけません。sndcallで、udataのlenフィールドが0の場合、相手トランスポート・ユーザに対してデータは送信されません。
復帰時、rcvcallのaddr,optおよびudataフィールドは、接続と関係する値を反映するように更新されます。したがって、各引数のmaxlenフィールドは、それぞれのバッファの最大サイズを示すために、この関数が出される前に設定しなければなりません。もしmaxlenが0よりも大きく、バッファの最大サイズよりも小さかった場合、t_connectはt_errnoにTBUFOVFLWを設定してエラー終了します。しかし、rcvcallはNULLであることもあります。この場合、t_connectからのリターンで、ユーザに与えられる情報はありません。
デフォルトで、t_connectは同期モードで実行し、ローカル・ユーザに制御を返す前に、相手ユーザの応答を待ちます。正常の復帰(すなわち、戻り値0)は、要求された接続が行われたことを示します。しかし、O_NDELAYまたは、O_NONBLOCKが設定されている場合(t_open(3N)またはfcntl(2)を介して)、t_connectは非同期モードで実行します。この場合、呼出しはリモート・ユーザの応答を待たずに、ローカル・ユーザに制御を返します。そして-1を返し、t_errnoをTNODATAに設定して、接続がまだ行われていないことを示します。このように、この関数は接続要求を相手トランスポート・ユーザに送信することにより、接続確立の手順を開始するだけです。
t_rcvconnect(3N)関数は、接続要求の状態を決定するため、t_connectと共に使用されます。
同期型t_connectの呼出しがシグナルによって中断された時、対応するトランスポート・エンドポイントの状態はT_OUTCONで、さらなるt_rcvconnect(3N),t_rcvdis(3N)またはt_snddis(3N)の呼出しを許容します。また、非同期型t_connectの呼出しがシグナルによって中断された時、対応するトランスポート・エンドポイントの状態はT_IDLEです。
エラー時には、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子がトランスポートエンドポイントを示していません。
[TOUTSTATE] 関数が、誤ったシーケンスで出されました。
[TNODATA] O_NDELAYまたはO_NONBLOCKが設定されたので、関数は接続確立手順の開始に成功しましたが、リモート・ユーザからの応答を待ちませんでした。
[TBADADDR] 指定されたプロトコル・アドレスは、そのフォーマットが正しくないか、または誤った情報を含んでいます。
[TBADOPT] 指定されたプロトコル・オプションは、そのフォーマットが正しくないか、または誤った情報を含んでいます。
[TBADDATA] 指定されたユーザ・データの量が、トランスポート・プロバイダが見込んだ範囲内にありません。
[TACCES] ユーザは、指定されたアドレス、またはオプションを使用する許可を得ていません。
[TBUFOVFLW] 入力引数(maxlen)に割り当てられたバイト数は、その引数の値を格納するために不十分です。同期モードで実行されるならば、ユーザから見たプロバイダの状態はT_DATAXFERに変わり、rcvcallに返されるべき接続指示情報は廃棄されます。
[TLOOK] このトランスポート・エンドポイントに非同期イベントが生じ、速やかな注意を必要とします。
[TNOTSUPPORT] この関数は、下位にあるトランスポート・プロバイダがサポートしません。
[TSYSERR] この関数の実行中に、システム・エラーが生じました。
fcntl(2),t_accept(3N),t_alloc(3N),t_getinfo(3N),t_getstate(3N),t_listen(3N),t_open(3N),
t_optmgmt(3N),t_rcvconnect(3N),t_rcvdis(3N),t_snddis(3N)
t_connectは、正常終了時には0を返します。異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_error(3N) t_error(3N)
t_error−エラー・メッセージの作成
#include <tiuser.h>
void t_error(const char *errmsg)
extern int t_errno; extern char *t_errlist[]; extern int t_nerr;
t_errorは、トランスポート関数に対する呼出し中に、発生した最後のエラーを説明する標準エラー出力のメッセージを作成します。引数文字列errmsgは、ユーザ供給のエラー・メッセージで、エラーの前後関係を示します。
t_errorは、t_errnoに記載されるカレントの値に対して、ユーザ供給メッセージ、コロン、そして、標準トランスポート関数エラー・メッセージを出力します。t_errnoがTSYSERRである場合、t_errorは、errnoに記載されるカレントの値に対する標準エラー・メッセージも出力します。
t_errlistは、ユーザにメッセージのフォーマッティングを行わせるためのメッセージ文字列の配列です。エラー・メッセージ文字列(終端改行なしの)を検索するために、t_errnoをこの配列のインデックスとして使用することができます。t_nerrは、t_errlist配列の最大インデックス値です。
エラー番号t_errnoは、エラー発生時のみ設定され、後続の呼出しが成功してもクリアされません。
不当アドレスが与えられたためにt_connect関数がトランスポート・エンドポイントfd2で異常終了となった場合、以下の呼出しがその後に続きます。
t_error("t_connect failed on fd2");
診断メッセージは、以下のように出力されます。
t_connect failed on fd2; incorrect transport address format
ここで、"t_connect failed on fd2"は、どの関数がどのトランスポート・エンドポイントで異常終了となったかをユーザに知らせ、"incorrect transport address format"は、発生した具体的なエラーを識別します。
t_free(3N) t_free(3N)
t_free−ライブラリ構造体の解放
#include <tiuser.h>
int t_free(char *ptr, int struct_type)
t_free関数は、以前にt_alloc(3N)によって割り当てられたメモリを解放します。この関数は、指定された構造体に対するメモリを解放し、また、構造体によって参照されるバッファに対するメモリも解放します。
ptrは、t_alloc(3N)で説明した6つの構造体タイプのうちの1つを指します。struct_typeは、その構造体のタイプを識別します。構造体のタイプは、以下のうちの1つです。
T_BIND struct t_bind
T_CALL struct t_call
T_OPTMGMT struct t_optmgmt
T_DIS struct t_discon
T_UDERROR struct t_uderr
T_INFO struct t_info
これらの各構造体は、1つまたは複数のトランスポート関数の引数として使用されます。
t_freeは、与えられた構造体のaddr,optおよびudataフィールドをチェックし(適当であれば)、netbuf構造体のbufフィールドが指すバッファを解放します。bufがNULLであれば、t_freeはメモリの解放を行いません。すべてのバッファが解放された後、t_freeは、ptrが指す構造体と関連するメモリを解放します。
ptrまたは、bufポインタのどれかが、t_alloc(3N)によって以前に割り当てられていないメモリのブロックを指した場合、未定義の結果が生じます。
エラー時には、t_errnoに以下のものが設定されます。
[TSYSERR] この関数の実行中に、システム・エラーが生じました。
[TNOSTRUCTYPE] struct_typeに不当な値が指定されました。fdで示したトランスポート・プロバイダが要求したstruct_typeをサポートしていません。
t_alloc(3N)
t_freeは、正常終了時には0を返します。異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_getinfo(3N) t_getinfo(3N)
t_getinfo−プロトコル固有のサービス情報の取得
#include <tiuser.h>
int t_getinfo(int fd, struct t_info *info)
この関数は、ファイル記述子fdに関連する下位にあるトランスポート・プロトコルのカレントの特性を返します。infoは、t_open(3N)で返された情報と同じ情報を返すために使用されますが、必ずしも正確に同じ値ではありません。この関数によって、トランスポート・ユーザは通信のどのフェーズにおいても、この情報にアクセスすることができます。
この引数は、以下のメンバが含まれたt_info構造体を指します。
struct t_info { t_scalar_t addr; /* size of protocol address */ t_scalar_t options; /* size of protocol options */ t_scalar_t tsdu; /* size of max transport service data unit */ t_scalar_t etsdu; /* size of max expedited tsdu */ t_scalar_t connect; /* max data for connection primitives */ t_scalar_t discon; /* max data for disconnect primitives */ t_scalar_t servtype; /* provider service type */ };
フィールドの値は、以下の意味を持ちます。
addr
0より大きい値は、トランスポート・プロトコル・アドレスの最大サイズを示します。-1の値は、アドレス・サイズに制限がないことを意味し、-2の値は、トランスポート・プロバイダがトランスポート・プロトコル・アドレスに対してユーザ・アクセスを提供しないことを意味します。
options
0より大きい値は、プロバイダがサポートするプロトコル固有のオプションの最大バイト数を示します。 -1の値は、オプションのサイズに制限がないことを意味し、-2の値は、トランスポート・プロバイダがユーザ設定可能なオプションをサポートしないことを意味します。
tsdu
0より大きい値は、トランスポート・サービス・データ・ユニット(TSDU)の最大サイズを示します。値0は、トランスポート・プロバイダは、接続を通じて論理境界を維持しないでデータ・ストリームを送信することはサポートしますが、TSDUの概念はサポートしないことを意味します。-1の値は、TSDUのサイズに制限がないことを意味し、-2の値は、通常データの転送をトランスポート・プロバイダがサポートしないことを意味します。
etsdu
0より大きい値は、優先トランスポート・サービス・データ・ユニット(ETSDU)の最大サイズを示します。0の値は、トランスポート・プロバイダは、接続を通じて論理境界を維持しないで優先データ・ストリームを送信することはサポートしますが、ETSDUの概念はサポートしないことを意味します。-1の値は、ETSDUのサイズに制限がないことを指定し、-2の値は、優先データの転送をトランスポート・プロバイダがサポートしないことを意味します。
connect
0より大きい値は、接続確立時において送信されるユーザ・データの最大量を示します。-1の値は、接続確立の間に送信されるデータの量に制限がないことを指定し、-2の値は、トランスポート・プロバイダは接続確立関数でユーザ・データが送信されることを許可しないことを意味します。
discon
0より大きい値は、t_snddis(3N)およびt_rcvdis(3N)において送信されるユーザ・データの最大量を示します。-1の値は、これらの打切り解放関数で送信するユーザ・データの量に制限がないことを意味し、-2の値は、トランスポート・プロバイダは打切り解放関数でデータが送信されることを許可しないことを意味します。
servtype
このフィールドは、以下に示すように、トランスポート・プロバイダがサポートするサービス・タイプを指定します。
トランスポート・ユーザがプロトコル独立性と関係がある場合、上記のサイズにアクセスして、それぞれの情報を保持するためにバッファがどれだけ大きくなければならないかを決めることができます。かわりに、t_alloc(3N)関数を用いて、これらのバッファを割り当てることができます。トランスポート・ユーザが関数において許可されたデータ・サイズを超えると、エラーが生じます。各フィールドの値は、オプションのネゴシエーションの結果、変わることがあります。ユーザは、t_getinfoによってカレントの特性を検索することができます。
infoのservtypeフィールドには、復帰時に以下の値のうち1つが指定されます。
T_COTS
トランスポート・プロバイダは、コネクション・モード・サービスをサポートしますが、オプションの合法的解放機能をサポートしません。X.25-TLIおよびHDLC-TLIでは、このサービス・タイプとなります。
T_COTS_ORD
トランスポート・プロバイダは、オプションの合法的解放機能を伴うコネクション・モード・サービスをサポートします。
T_CLTS
トランスポート・プロバイダは、コネクションレス・モードのサービスをサポートします。このサービス・タイプに関して、t_openは、etsdu,connectおよびdisconに対して-1を返します。
異常終了時には、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子が、トランスポート・エンドポイントを示していません。
[TSYSERR] この関数の実行中に、システム・エラーが生じました。
t_alloc(3N),t_open(3N),t_optmgmt(3N),t_rcvdis(3N),t_snddis(3N)
t_getinfoは、正常終了時には0を返します。異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_getstate(3N) t_getstate(3N)
t_getstate−カレントの状態の取得
#include <tiuser.h>
int t_getstate(int fd)
t_getstate関数は、fdが指定するトランスポート・エンドポイントと関連するプロバイダのカレントの状態を返します。カレントの状態は、以下のうちの1つです。
T_UNBND バインドされていない
T_IDLE アイドルである
T_OUTCON 発信接続がペンディングである
T_INCON 着信接続がペンディングである
T_DATAXFER データ転送
t_getstateが呼び出されたときにプロバイダで状態遷移が行われている場合、この関数はエラーとなります。
異常終了時には、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子が、トランスポート・エンドポイントを示していません。
[TSTATECHNG] トランスポート・プロバイダが、状態変更を受けています。
[TSYSERR] この関数の実行中に、システム・エラーが生じました。
t_open(3N)
t_getstateは、正常終了時にはカレントの状態を返します。異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_listen(3N) t_listen(3N)
t_listen−接続要求の受付待ち
#include <tiuser.h>
int t_listen(int fd, struct t_call *call)
この関数は、呼び出し元トランスポート・ユーザからの接続要求を受付待ちします。fdは、接続指示が到着したローカル・トランスポート・エンドポイントを識別し、リターンで、callは接続指示を説明する情報を示します。callは、以下のメンバを含むt_call構造体を指します。
struct t_call { struct netbuf addr; /* address */ struct netbuf opt; /* options */ struct netbuf udata; /* user data */ int sequence; /* sequence number */ };
callにおいて、addrは呼び出し元トランスポート・ユーザのプロトコル・アドレスを返し、optは接続要求と関連するプロトコル固有のパラメタを返します。またudataは、接続要求で呼び出し元が送信したすべてのユーザ・データを返します。sequenceは、返される接続指示を一意に識別する数字です。sequenceの値によって、ユーザは複数の接続指示を、それらのうちのどれかに応答する前に、受付待ちすることができます。
この関数は、callのaddr,optおよびudataフィールドに対する値を返すので、それぞれのバッファの最大サイズを示すために、それぞれのmaxlenフィールドは、t_listenを入力する前に設定しなければなりません。maxlenフィールドに0が設定された場合、そのパラメタに返される情報はありません。
t_listenは、デフォルトで同期モードで実行し、ユーザに戻す前に接続指示が到着するのを待ちます。しかし、O_NDELAYまたはO_NONBLOCKが設定されていれば(t_open(3N)またはfcntl(2)を介して)、t_listenは非同期で実行し、現在ある接続指示のポーリングのみになります。使用可能なものがない場合は-1を返し、t_errnoをTNODATAに設定します。
エラー時には、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子が、トランスポート・エンドポイントを示していません。
[TBUFOVFLW] 入力引数(maxlen)に対して割り当てられたバイト数は、その引数の値を格納するためには不十分です。ユーザから見たプロバイダの状態はT_INCONに変わり、callで返されるべき接続指示情報は廃棄されます。返されたsequenceの値は、t_snddis(3N)を実施するために使用できます。
[TNODATA] O_NDELAYまたはO_NONBLOCKが設定されたが、接続指示情報が待ち行列に入っていません。
[TLOOK] このトランスポート・エンドポイントで非同期イベントが生じ、速やかな注意を必要としています。
[TNOTSUPPORT] この関数は、トランスポート・プロバイダがサポートしていません。
[TSYSERR] この関数の実行中にシステムエラーが生じました。
[TOUTSTATE] 関数が誤ったシーケンスで出されました。
受付待ち用にバインドされていない(すなわち、t_bind(3N)でqlenが0である)トランスポート・エンドポイントで、ユーザが同期モードでt_listenを入力した場合、そのエンドポイントに接続指示は来ないので、コールは永久に待つことになります。
fcntl(2),t_accept(3N),t_alloc(3N),t_bind(3N),t_connect(3N),t_open(3N),t_optmgmt(3N),
t_rcvconnect(3N),t_snddis(3N)
t_listenは、正常終了時には0を返します。異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_look(3N) t_look(3N)
t_look−トランスポート・エンドポイント上のカレント・イベントの通知
#include <tiuser.h>
int t_look(int fd)
この関数は、fdが指定するトランスポート・エンドポイント上のカレントのイベントを返します。この関数によりトランスポート・プロバイダは、ユーザが関数を同期モードで実行している時に、トランスポート・ユーザに非同期イベントを知らせることができます。ユーザに対して速やかな通知が必要なイベントもあり、それらはカレントの関数または次に実行されるべき関数で、特定のエラーTLOOKによって示されます。
この関数によりトランスポート・ユーザは、非同期イベントに対して定期的にポーリングをすることもできます。
エラー時には、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子が、トランスポート・エンドポイントを示していません。
[TSYSERR] この関数の実行中にシステム・エラーが生じました。
t_open(3N)
正常終了時、t_lookは、どの許容可能な事象が生じたかを示す値を返します。イベントが何も存在しない場合には、0を返します。以下の事象のうち1つが返されます。
T_LISTEN 接続指示受信
T_CONNECT 接続確認受信
T_DATA 通常データ受信
T_EXDATA 優先データ受信
T_DISCONNECT 切断受信
異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_open(3N) t_open(3N)
t_open−トランスポート・エンドポイントの確立
#include <tiuser.h>
#include <fcntl.h>
int t_open(const char *path, int oflag, struct t_info *info)
t_openは、トランスポート・エンドポイントの初期化の第一ステップとして、呼び出されなければなりません。この関数は、特定のプロバイダ(すなわち、トランスポート・プロトコル)を識別するUNIXファイルをオープンすること、および、そのエンドポイントを識別するファイル記述子を返すことによって、トランスポート・エンドポイントを確立します。
pathはオープンするべきファイルのパス名を指し、oflagはオープン・フラグを識別(open(2)と同様に)します。oflagは、O_RDWRとORされたO_NDELAYまたは、O_NONBLOCKで構成することができます。これらのフラグは、ヘッダ・ファイル<fcntl.h>内に定義されます。t_openは、後続のすべての関数が特定のローカル・トランスポート・エンドポイントを識別するために使用するファイル記述子を返します。
この関数はまた、t_info構造体内のフィールドの設定によって、トランスポート・プロトコル特有の様々なデフォルト値を返すことができます。infoは、以下のメンバを含むt_info構造体を指します。
struct t_info { t_scalar_t addr; /* size of protocol address */ t_scalar_t options; /* size of protocol options */ t_scalar_t tsdu; /* size of max transport service data unit */ t_scalar_t etsdu; /* size of max expedited tsdu */ t_scalar_t connect; /* max data for connection primitives */ t_scalar_t discon; /* max data for disconnect primitives */ t_scalar_t servtype; /* provider service type */ };
フィールドの値は、以下の意味を持ちます。
addr
0より大きい値は、トランスポート・プロトコル・アドレスの最大サイズを示します。-1の値は、アドレス・サイズに制限がないことを意味し、-2の値は、トランスポート・プロバイダがトランスポート・プロトコル・アドレスに対してユーザ・アクセスを提供しないことを意味します。
options
0より大きい値は、プロバイダがサポートするプロトコル固有のオプションの最大バイト数を示します。-1の値は、オプションのサイズに制限がないことを意味し、-2の値は、トランスポート・プロバイダがユーザ設定可能なオプションをサポートしないことを意味します。
tsdu
0より大きい値は、トランスポート・サービス・データ・ユニット(TSDU)の最大サイズを示します。0の値は、トランスポート・プロバイダは、接続を通じて論理境界を維持しないでデータ・ストリームを送信することはサポートするが、TSDUの概念はサポートしないことを意味します。-1の値は、TSDUのサイズに制限がないことを指定し、-2の値は、通常データの転送をトランスポート・プロバイダがサポートしないことを意味します。
etsdu
0より大きい値は、優先トランスポート・サービス・データ・ユニット(ETSDU)の最大サイズを示します。0の値は、トランスポート・プロバイダは、接続を通じて論理境界を維持しないで優先データ・ストリームを送信することはサポートするが、ETSDUの概念はサポートしないことを意味します。-1の値は、ETSDUのサイズに制限がないことを指定し、-2の値は、優先データの転送をトランスポート・プロバイダがサポートしないことを意味します。
connect
0より大きい値は、接続確立時において送信されるユーザ・データの最大量を示します。-1の値は、接続確立の間に送信されるデータの量に制限がないことを意味し、-2の値は、トランスポート・プロバイダは接続確立関数でユーザ・データが送信されることを許可しないことを意味します。
discon
0より大きい値は、t_snddis(3N)およびt_rcvdis(3N)において送信されるユーザ・データの最大量を示します。-1の値は、これらの打切り解放関数で送信するユーザ・データの量に制限がないことを意味し、-2の値は、トランスポート・プロバイダは打切り解放関数でデータが送信されることを許可しないことを意味します。
servtype
このフィールドは、以下に示すように、トランスポート・プロバイダがサポートするサービス・タイプを示します。
トランスポート・ユーザがプロトコル独立性と関係する場合、それぞれの情報を保持するためにはバッファがどれだけの大きさがなければならないかを決めるために、上記のサイズにアクセスすることができます。代わりに、t_alloc(3N)を用いてこれらのバッファを割り当てることもできます。どれにおいても、トランスポート・ユーザが許可されたデータ・サイズを超えると、エラーが生じます。
infoのservtypeフィールドは、復帰時に以下の値のうち1つが指定されます。
T_COTS
トランスポート・プロバイダは、コネクション・モード・サービスをサポートしますが、オプションの合法的解放機能をサポートしません。X.25-TLIおよびHDLC-TLIでは、このサービス・タイプとなります。
T_COTS_ORD
トランスポート・プロバイダは、オプションの合法的解放機能を伴うコネクション・モード・サービスをサポートします。
T_CLTS
トランスポート・プロバイダは、コネクションレス・モード・サービスをサポートします。このサービス・タイプに関して、t_openは、etsdu,connectおよびdisconに対して-2を返します。
単一のトランスポート・エンドポイントは、一時に、上記サービスのうちの1つだけをサポートすることができます。
トランスポート・ユーザがinfoをNULLに設定した場合、t_openによって、プロトコル情報は返されません。
エラーの場合には、t_errnoに以下のうち1つが設定されます。
[TSYSERR] この関数の実行中にシステム・エラーが生じました。
[TBADFLAG] 無効フラグが指定されました。
open(2)
t_openは、正常終了時には有効なファイル記述子を返します。異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_optmgmt(3N) t_optmgmt(3N)
t_optmgmt−トランスポート・エンドポイントに対するオプションの管理
#include <tiuser.h>
int t_optmgmt(int fd, struct t_optmgmt *req, struct t_optmgmt *ret)
t_optmgmt関数によりトランスポート・ユーザは、トランスポート・プロバイダと、プロトコル・オプションの検索、検証、または処理を行うことができます。fdは、バインドされたトランスポート・エンドポイントを識別します。
req引数およびret引数は、以下のメンバを含むt_optmgmt構造体を指します。
struct t_optmgmt { struct netbuf opt; t_scalar_t flags; };
optフィールドは、プロトコル・オプションを識別し、flagsフィールドは、これらのオプションで取るべきアクションを指定するために使用します。
オプションはnetbuf構造体によって、t_bind(3N)におけるアドレスと同様に表されます。reqは、プロバイダの特定のアクションを要求するためおよび、オプションをプロバイダに送信するために使用します。lenはオプションのバイト数を指定し、bufはオプション・バッファを指します。maxlenは、req引数に対しては、何も意味がありません。トランスポート・プロバイダは、オプション、およびフラグ値を、retをとおしてユーザに返すことができます。retに対して、maxlenはオプション・バッファの最大サイズを指定し、bufはオプションが配置されるべきバッファを指します。リターンで、lenは返されるオプションのバイト数を指定します。maxlenは、req引数に対しては意味がありませんが、ret引数ではオプション・バッファが保持することができる最大バイト数を指定するために、設定しなければなりません。実際の構造体、およびオプションの内容は、トランスポート・プロバイダが示します。
reqのflagsフィールドは、以下のアクションのうち1つを指定することができます。
T_NEGOTIATE
このアクションによって、ユーザは、reqに指定されたオプションの値を、トランスポート・プロバイダと処理することができます。プロバイダは、要求されたオプションを評価し、値を処理し、そして処理した値を、retを介して返します。X.25-TLI、HDLC-TLIで本関数を使用する場合は、必ずoptのnetbuf構造体をnetdir_optionsルーチンにより得てください。netdir_optionsルーチンについては、netdir(3N)を参照してください。
T_CHECK
X.25-TLI,HDLC-TLIでは、サポートされていません。
T_DEFAULT
X.25-TLI,HDLC-TLIでは、サポートされていません。
エラーの場合、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子が、トランスポート・エンドポイントを示していません。
[TOUTSTATE] 関数が、誤ったシーケンスで入力されました。
[TACCES] ユーザは、指定されたオプションに処理する許可を得ていません。
[TBADOPT] 指定されたプロトコルオプションのフォーマットが正しくないか、または不当な情報を含んでいます。
[TBADFLAG] 無効なフラグが指定されました。
[TBUFOVFLW] 入力引数(maxlen)に対して見込まれたバイト数は、その引数の値を格納するためには不十分です。retで返されるべき情報は廃棄されます。
[TSYSERR] この関数の実行中にシステム・エラーが生じました。
[TNOTSUPPORT] この関数は、下位のトランスポート・プロバイダによってサポートされていません。
netdir(3N),t_bind(3N),t_getinfo(3N),t_open(3N)
t_optmgmtは、正常終了時には0を返します。異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_rcv(3N) t_rcv(3N)
t_rcv−接続を介して送信されたデータまたは優先データの受信
#include <tiuser.h>
int t_rcv(int fd, char *buf, unsigned nbytes, int *flags)
この関数は、通常データまたは優先データを受信します。fdはデータが通って到着するローカル・トランスポート・エンドポイントを識別し、bufはユーザ・データが配置されるべき受信バッファを指します。nbytesは、受信バッファのサイズを指定します。flagsはt_rcvからのリターンで設定され、以下に示すようなオプションのフラグを指定します。
デフォルトで、t_rcvは同期モードで実行し、現在有効なデータがない場合には、データの到着を待ちます。しかし、O_NDELAYまたはO_NONBLOCKが設定されている場合(t_open(3N)またはfcntl(2)を介して)、t_rcvは非同期モードで実行し、有効なデータがない場合には失敗します。(以下のTNODATAを参照)
復帰時において、flagsにT_MOREが設定されている場合、これは、さらにデータがあることを示しており、カレントのデータ・ユニットまたは優先データ・ユニットを、複数のt_rcvコールで受信しなければなりません。非同期モードまたは異常な状況下(例えば、シグナルの到着や、T_EXDATA事象の発生)では、受信したバイト数が指定された受信バッファのサイズよりも小さい時でも、t_rcvの復帰でT_MOREフラグが設定されることがあります。
T_MOREフラグが設定されているt_rcvは、それぞれその後に別のt_rcvが続いて、カレントのデータに対してさらにデータを取得しなければならないことを示します。データの終わりは、T_MOREフラグが設定されていないt_rcvが返されることによって識別します。t_open(3N)またはt_getinfo(3N)からの復帰時、info引数にトランスポート・プロバイダがTSDUの概念をサポートしないことが示された場合、T_MOREフラグには意味がなく、無視されます。flagsは、HDLC-TLIにおいて、未サポートです。
復帰の際、T_EXPEDITEDがflagsに設定されている場合、返されたデータは優先データです。優先データのバイト数がnbytesを超えた場合、t_rcvは、最初のコールからのリターンで、T_EXPEDITEDおよびT_MOREを設定します。残りのデータを検索する後続のコールは、リターンでT_EXPEDITEDが設定されます。データの終わりは、T_MOREフラグが設定されていないt_rcvコールが返されることによって識別します。
シグナルが到着した場合、t_rcvはユーザに現在有効なデータを与え、復帰します。有効なデータがなかった場合、t_rcvは-1で返り、t_errnoにTSYSERR、errnoにEINTRを設定します。いくつかのデータが有効な場合、t_rcvは受信したバイト数を返し、flagsにT_MOREを設定します。
同期モードでは、この関数を発行するか、t_look(3N)を使用してT_DATAまたはT_EXDATAの事象をチェックすることが、ユーザに通常データまたは優先データの到着を知らせる唯一の方法です。
エラーの場合には、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子が、トランスポート・エンドポイントを示していません。
[TNODATA] O_NDELAYまたはO_NONBLOCKが設定されましたが、現在トランスポート・プロバイダから有効なデータはありません。
[TLOOK] このトランスポート・エンドポイントで非同期イベントが生じ、速やかな注意を必要としています。
[TNOTSUPPORT] この関数は、下位にあるトランスポート・プロバイダがサポートしていません。
[TSYSERR] この関数の実行中にシステム・エラーが生じました。
[TOUTSTATE] 関数がfdで参照したトランスポート・エンドポイントで間違った順序で発行されました。
fcntl(2),t_getinfo(3N),t_look(3N),t_open(3N),t_snd(3N)
t_rcvは、正常終了時には受信したバイト数を返します。また、異常終了時には-1を返して、t_errnoが設定され、エラーを示します。
t_rcvconnect(3N) t_rcvconnect(3N)
t_rcvconnect−接続要求からの確認の受信
#include <tiuser.h>
int t_rcvconnect(int fd, struct t_call *call)
この関数によって、呼出し元トランスポート・ユーザは、前に送信された接続要求の状態を判断することができ、t_connect(3N)と関連して用いて、非同期モードで接続を確立します。この関数が正常終了すると、接続が確立されます。
fdは通信が確立されるトランスポート・エンドポイントを識別し、callには新たに確立される接続と関係する情報があります。callは、以下のメンバを含むt_call構造体を指します。
struct t_call { struct netbuf addr; /* address */ struct netbuf opt; /* options */ struct netbuf udata; /* user data */ int sequence; /* sequence number */ };
callにおいて、addrは受信側トランスポート・エンドポイントと関係するプロトコル・アドレスを返し、optは接続と関係するプロトコル固有の情報を表し、udataは接続確立中に相手トランスポート・ユーザが返すオプションのユーザ・データを指します。sequenceは、この関数では意味がありません。
各引数のmaxlenフィールドは、それぞれのバッファの最大サイズを示すために、この関数を入力する前に設定されなければなりません。しかし、t_rcvconnectからの復帰時に、ユーザに与えられる特定の引数への情報がない場合、maxlenに0を設定することができます。callにNULLが設定された場合は、t_rcvconnectからのリターンにおいてユーザに与えられる情報は何もありません。
デフォルトで、t_rcvconnectは同期モードで実行し、戻る前に接続が確立されるのを待ちます。復帰時、addrフィールド、optフィールド、およびudataフィールドには、接続と関係する値を反映します。
O_NDELAYまたはO_NONBLOCKが設定されている場合(t_open(3N)またはfcntl(2)を介して)、t_rcvconnectは非同期モードで実行し、現在ある接続確認に対するポーリングのみとなります。使用できるものがない場合、t_rcvconnectはエラーとなり、接続の確立を待たずに戻ります。(以下のTNODATAを参照)t_rcvconnectは、接続確立フェーズを完了し、callで返される情報を検索するために、後で再発行しなければなりません。
エラーの場合には、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子が、トランスポート・エンドポイントを示していません。
[TBUFOVFLW] 入力引数(maxlen)に対して割り当てられたバイト数は、その引数の値を格納するために不十分で、callで返されるべき接続情報は廃棄されます。ユーザから見たプロバイダの状態は、T_DATAXFERに変わります。
[TNODATA] O_NDELAYまたはO_NONBLOCKが設定されましたが、接続確認がまだ到着していません。
[TLOOK] このトランスポート・エンドポイントで非同期イベントが生じ、速やかな注意を必要としています。
[TNOTSUPPORT] この関数は、下にあるトランスポート・プロバイダがサポートしていません。
[TSYSERR] この関数の実行中にシステム・エラーが生じました。
[TOUTSTATE] 関数がfdで参照したトランスポート・エンドポイントで間違った順序で発行されました。
fcntl(2),t_accept(3N),t_alloc(3N),t_bind(3N),t_connect(3N),t_listen(3N),t_open(3N)
t_optmgmt(3N)
t_rcvconnectは、正常終了時には0を返します。異常終了時には-1を返し、t_errnoが設定され、エラーを示します。
t_rcvdis(3N) t_rcvdis(3N)
t_rcvdis−切断からの情報の検索
#include <tiuser.h>
t_rcvdis(int fd, struct t_discon *discon)
この関数は切断の原因を識別し、切断によって送信されたユーザ・データを検索するために使用します。fdは接続があったローカル・トランスポート・エンドポイントを表し、disconは以下のメンバを含むt_discon構造体を指します。
struct t_discon { struct netbuf udata; /* user data */ int reason; /* reason code */ int sequence; /* sequence number */ };
reasonはプロトコル依存の原因コードによって切断の理由を示し、udataは切断によって送信されたユーザデータを示します。sequenceは、切断に関連する未処理の接続指示を示します。sequenceは、1つまたは複数のt_listen(3N)関数を実行しているトランスポート・ユーザによってt_rcvdisが実行され、その接続指示を処理中のときにのみ意味を持ちます。切断指示が発生したとき、その切断に関連する未処理の接続指示がどれであるかを、sequenceを用いて識別することができます。
ユーザが着信データのあるなしを気にしない場合、udataのmaxlenフィールドには0を設定できます。さらに、reasonまたはsequenceの値を知る必要がない場合、disconはNULLでよく、切断に関連するユーザ・データはすべて廃棄されます。しかし、ユーザが2個以上の未処理の接続指示を検索しており(t_listen(3N)によって)、disconがNULLである場合、ユーザは切断がどの接続指示に関連しているかを識別することはできません。
エラーの場合には、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子が、トランスポート・エンドポイントを示していません。
[TNODIS] 現在、指定されたトランスポート・エンドポイントに、切断指示が存在しません。
[TBUFOVFLW] 着信するデータに対して割り当てられたバイト数は、そのデータを格納するために不十分です。ユーザから見たプロバイダの状態はT_IDLEに変わり、disconで返されるべき切断指示情報は廃棄されます。
[TNOTSUPPORT] この関数は、下位のトランスポート・プロバイダがサポートしていません。
[TSYSERR] この関数の実行中にシステム・エラーが生じました。
t_alloc(3N),t_connect(3N),t_listen(3N),t_open(3N),t_snddis(3N)
t_rcvdisは、正常終了時には0を返します。異常終了時には-1を返し、エラーを示すためにt_errnoを設定します。
t_snd(3N) t_snd(3N)
t_snd−データまたは優先データの送信
#include <tiuser.h>
int t_snd(int fd, char *buf, unsigned nbytes, int flags)
この関数は、通常データまたは優先データを送信するために使用されます。fdはデータが送信されるローカル・トランスポート・エンドポイントを表し、bufはユーザ・データを示し、nbytesは送信されるユーザ・データのバイト数を示します。そしてflagsは、以下に説明するオプションのフラグを示します。
デフォルトで、t_sndは同期モードで動作し、呼出しが行われた時にフロー制御上の制限によってローカル・トランスポート・プロバイダがデータを受信できない場合には、待機することがあります。しかし、O_NDELAYまたはO_NONBLOCKが(t_open(3N)またはfcntl(2)によって)設定されている場合には、t_sndは非同期モードで実行され、フロー制御上の制限が存在する場合にはすぐに異常終了します。
フロー制御上の制限がない場合でも、t_sndは、O_NDELAYまたはO_NONBLOCKの状態にかかわらず、STREAMS内部資源が使用可能でなければ待機します。
正常終了した場合には、t_sndはトランスポート・プロバイダが受信したバイト数を返します。通常、これはnbytesによって指定されたバイト数に等しいものです。しかし、O_NDELAYまたはO_NONBLOCKが設定されている場合には、トランスポート・プロバイダはデータの一部だけを受信することもできます。その場合、t_sndはnbytesよりも少ない数を返します。
もしnbytesが0で、0バイトの送信が下位のトランスポート・プロバイダによってサポートされていない場合には、t_sndは-1を返し、t_errnoにTBADDATAを設定します。返された値が0の場合は、0長のデータ・メッセージ送信要求がプロバイダに通知されたことを意味します。
t_sndが通信トランスポート・プロバイダにデータを転送する前に、シグナルによって中断された場合、t_errnoにTSYSERRを、errnoにEINTRを設定して-1を返します。
T_EXPEDITEDがflagsの中に設定されている場合、データは優先データとして送信され、トランスポート・プロバイダで解釈されます。
もし、T_MOREがflagsの中に設定されている場合、または上述のように設定されている場合には、データ・ユニットまたは優先データ・ユニットが、複数のt_snd呼び出しによって送信されているという指示が、トランスポート・プロバイダに通知されます。T_MOREフラグが設定されたそれぞれのt_sndは、カレントのデータに対して、さらにデータを持った別のt_sndが続くことを示しています。データの終わりは、T_MOREフラグの設定されていないt_snd呼び出しによって示されます。T_MOREを使用することによって、接続の他端においてそれらのユニットの境界を失うことなく、ユーザが大きな論理データユニットを分割することを可能にします。flagsは、トランスポート・インタフェース下でのデータ転送のために、データがどのようにパッケージ化されるかについては、何も示唆しません。
もし、トランスポート・プロバイダがt_open(3N)またはt_getinfo(3N)の復帰でinfo引数内に示すように、TSDUの概念をサポートしていない場合、T_MOREフラグには意味がなく、設定しても無視されます。HDLC-TLIにおいては、このflagsは未サポートです。
長さ0のTSDUまたはETSDUの断片の送信は、TSDUまたはETSDUの終わりを示すために使用する時のみ許され、それはT_MOREフラグが設定されていない時です。
データの大きさは、t_open(3N)またはt_getinfo(3N)によって戻されたトランスポート・プロバイダの限度を超えてはなりません。もしも、その大きさを超えた場合には、EPROTOによるシステム・エラーTSYSERRが発生します。しかし、EPROTOエラーはすぐには報告されないので、t_sndは異常終了しないこともありえます。この場合は、トランスポート・エンドポイントにアクセスする後続の呼出しが、関連するTSYSERRによって異常終了します。もし、t_sndがT_IDLE状態から呼び出された場合には、プロバイダはデータを廃棄します。
もし、t_sndがT_DATAXFER,T_INRELまたはT_IDLE以外の状態から発行された場合には、プロバイダは、EPROTOによってシステム・エラーTSYSERR(これは上述の方法によって報告されます)を生成します。
エラーの場合には、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子が、トランスポート・エンドポイントを参照していません。
[TFLOW] O_NDELAYまたはO_NONBLOCKは設定されていたが、この時にフロー制御機構が、トランスポート・プロバイダがデータを受け付けるのを防止しました。
[TNOTSUPPORT] この関数は、下位のトランスポート・プロバイダがサポートしていません。
[TSYSERR] この関数の実行中にシステム・エラーが検出されました。
[TBADDATA] nbytesが0で、そして0バイトの送信がトランスポート・プロバイダによってサポートされていません。
fcntl(2),t_getinfo(3N),t_look(3N),t_open(3N),t_rcv(3N)
正常終了時には、t_sndはトランスポート・プロバイダによって受け付けられたバイト数を返します。異常終了時には-1を返し、エラーを示すためにt_errnoを設定します。
注意:もし通信プロバイダに受け付けられたバイト数が、要求したバイト数よりも小さかった場合、これはO_NONBLOCKが設定されていて、通信プロバイダがフロー制御のために妨げられたか、またはO_NONBLOCKが設定されていなくて、関数がシグナルにより中断されたかのどちらかを示します。
t_snddis(3N) t_snddis(3N)
t_snddis−ユーザ起動の切断要求の送信
#include <tiuser.h>
int t_snddis(int fd, struct t_call *call)
この関数は、すでに確立された接続の打切り解放を行ったり、接続要求を拒否するために使用されます。fdは接続のローカル・トランスポート・エンドポイントを表し、callはその打切り解放に関連する情報を示します。callは以下のメンバを含むt_call構造体を指します。
struct t_call { struct netbuf addr; /* address */ struct netbuf opt; /* options */ struct netbuf udata; /* user data */ int sequence; /* sequence number */ };
callの値は、t_snddisの呼び出しの状況に応じて、異なった意味を持っています。接続要求を拒否する場合には、callは必要です。トランスポート・プロバイダへの拒否された接続指示を一意的に識別するための有効なsequence値が設定されていなければなりません。sequenceフィールドは、トランスポート・コネクションがT_INCON状態(t_getstate(3N)を参照)にある時のみ意味を持ちます。callのaddrフィールドおよびoptフィールドは、無視されます。その他のすべての場合に、接続要求によってデータが送信される時にのみ、callが使用されます。t_call構造体のaddrフィールド、optフィールド、およびsequenceフィールドは、無視されます。もし、ユーザがリモート・ユーザにデータを送信したくない場合には、callの値はNULLにします。
udataは、リモート・ユーザに送信されるべきユーザ・データを示します。ユーザ・データの量は、t_open(3N)またはt_getinfo(3N)のinfo引数の中のdisconフィールドに返された、トランスポート・プロバイダによってサポートされる限度を超えてはなりません。もし、udataのlenフィールドが0の場合には、リモート・ユーザにはデータは送信されません。
エラーの場合には、t_errnoに以下のうちの1つが設定されます。
[TBADF] 指定されたファイル記述子は、トランスポート・エンドポイントを参照していません。
[TOUTSTATE] この関数が、誤ったシーケンスで呼び出されました。トランスポート・プロバイダの発信キューはフラッシュされ、データは失われました。
[TBADDATA] 指定されたユーザ・データの量は、トランスポート・プロバイダによって許容される限界を超えています。トランスポート・プロバイダの発信キューはフラッシュされ、データは失われました。
[TBADSEQ] 接続要求を拒否した時に、無効のシーケンス番号が指定されたか、またはNULL呼び出し構造体が指定されました。トランスポート・プロバイダの発信キューはフラッシュされ、データは失われました。
[TLOOK] このトランスポートのエンドポイントに非同期イベントが発生し、すぐに対応が必要とされます。
[TNOTSUPPORT] この関数は、下位のトランスポート・プロバイダによってサポートされていません。
[TSYSERR] この関数の実行中に、システム・エラーが発生しました。
t_connect(3N),t_getinfo(3N),t_getstate(3N),t_listen(3N),t_open(3N),t_snd(3N)
t_snddisは、正常終了時には0を返します。異常終了時には-1を返し、エラーを示すためにt_errnoを設定します。
注意:t_snddisは強制切断です。従って、コネクション・エンドポイントで発行されたt_snddisは、もしエラーが返されたとしても、前にt_snd(3N)によって送信されたデータまたは、まだ受信されていないデータの消失を引き起こすことがあります。
t_sync(3N) t_sync(3N)
t_sync−トランスポート・ライブラリの同期化
#include <tiuser.h>
int t_sync(int fd)
fdによって指定されるトランスポート・エンドポイントに対して、t_syncは、トランスポート・ライブラリによって管理されているデータ構造体と、該当するトランスポート・プロバイダからの情報を同期させます。その場合に、rawファイル記述子(open(2),dup(2)によって得られた、またはfork(2)およびexec(2)の結果として得られる)を、これがトランスポート・プロバイダに参照されると想定して、初期化されたトランスポート・エンドポイントに変換することができます。この関数は、また2つの関連プロセスがそれらの間の対話をトランスポート・プロバイダに同期させることを可能にします。
例えば、あるプロセスがある新しいプロセスをfork(2)し、exec(2)を実行する場合には、その新しいプロセスは、トランスポート・エンドポイントに関連したプライベート・ライブラリ・データ構造を構築するため、およびデータ構造を関係するプロバイダの情報に同期させるために、t_syncを実行しなければなりません。
トランスポート・プロバイダは、トランスポート・エンドポイントのすべてのユーザを1つのユーザとして扱うことを、覚えておくことが大切です。複数のプロセスが、同じエンドポイントを使用している場合には、それらのプロセスは、プロバイダの状態を乱さないようにその動作の調和を取らなければなりません。t_syncは、プロバイダのカレントの状態をユーザに戻し、そうすることによって、ユーザが次の処理をする前に状態を検証することを可能にしています。この調和は、協力プロセスの間でだけ有効です。t_syncが実行された後で、あるプロセスまたは着信イベントが、プロバイダの状態を変化させることがあります。
もし、t_syncが呼び出された時にプロバイダが状態遷移を行っている場合には、エラーになります。
エラーになると、t_errnoに以下の中の1つが設定されます。
[TBADF] 指定されたファイル記述子は、トランスポート・エンドポイントを参照していません。
[TSTATECHNG] トランスポート・プロバイダは状態遷移を行っています。
[TSYSERR] この関数の実行中にシステム・エラーが発生しました。
dup(2),exec(2),fork(2),open(2)
t_syncは、正常終了時は、トランスポート・プロバイダの状態を返します。異常終了時には、-1を返し、エラーを示すためにt_errnoを設定します。状態としては、以下のうちの1つが返されます。
T_UNBND バインドされていない
T_IDLE アイドルである
T_OUTCON 発信接続がペンディングである
T_INCON 着信接続がペンディングである
T_DATAXFER データ転送
t_unbind(3N) t_unbind(3N)
t_unbind−トランスポート・エンドポイントの無効化
#include <tiuser.h>
int t_unbind(int fd)
t_unbind関数は、以前にt_bind(3N)によってバインドされたfdによって指定されるトランスポート・エンドポイントを無効化します。この呼び出しの完了によって、トランスポート・プロバイダは、このトランスポート・エンドポイントに宛てられたデータまたはイベントを受け付けなくなります。
t_unbindの使用により無効となったエンドポイントは、その後のt_bind(3N)の呼出しによって使用可能とすることができます。
エラーになると、t_errnoに以下の中の1つが設定されます。
[TBADF] 指定されたファイル記述子は、トランスポート・エンドポイントを参照していません。
[TOUTSTATE] この関数が誤ったシーケンスで入力されました。
[TLOOK] このトランスポート・エンドポイントに非同期イベントが発生しました。
[TSYSERR] この関数の実行中にシステム・エラーが発生しました。
t_bind(3N)
t_unbindは、正常終了時には、0を返します。異常終了時には、-1を返し、エラーを示すためにt_errnoを設定します。
netconfig(4) netconfig(4)
netconfig−ネットワーク構成データベース
#include <netconfig.h>
ネットワーク構成データベース/etc/netconfigは、システムに接続されていて使用可能なネットワークに関する情報を格納しているシステム・ファイルです。netconfigデータベース、およびそれにアクセスするルーチン(getnetconfig(3N)を参照)は、ネットワーク・セレクションの構成要素の一部です。ネットワーク・セレクションの構成要素には、NETPATH環境変数と、NETPATH構成要素をnetconfigエントリのリンクとして使用し、netconfigデータベースにアクセスするルーチンのグループが含まれています。NETPATHについてはenviron(5)で、またNETPATHアクセス・ルーチンについてはgetnetpath(3N)で説明します。
netconfigには、システムで使用可能な各ネットワーク用のエントリが収められています。エントリは、復帰改行で区切られています。また、各フィールドは空白スペース(スペースおよびタブ)で区切られ、以下に説明する順序で現れます。バックスラッシュは、\\と記述します。各フィールドは、netconfig構造体の各要素に対応しています。netconfig構造体およびこのマニュアル・ページで説明している識別子については、<netconfig.h>で定義されています。
network ID
ネットワークを一意に識別するのに使用される文字列です。network IDは、ヌルでない文字から成り、長さは最小1で、最大は制限されていませんが、1行の最大文字数に制限があります。このフィールドはローカルに意味を持ち、ローカル・システム管理者に命名権があります。システムのnetwork IDは、すべて一意でなければなりません。ただし、network IDを意識しているアプリケーションもありますので、システムで提供されているnetwork IDのエントリは変更しないでください。
semantics
semanticsフィールドは、ネットワークのセマンティクスを識別する文字列です。すなわち、提供するサービス・インタフェースを識別し、ネットワークがサポートするサービスのセットを識別する文字列です。semanticsフィールドは必須です。下記のセマンティクスが認識されます。
tpi_clts トランスポート・プロバイダ・インタフェース、コネクションレス型
tpi_cots トランスポート・プロバイダ・インタフェース、コネクション型
tpi_cots_ord トランスポート・プロバイダ・インタフェース、コネクション型、合法的解放をサポート
flag
flagフィールドは、2つの値(真および偽)でネットワークの属性を記録します。flagは、それぞれが対応する属性の値を示す文字の組み合わせによって構成された文字列です。文字がある場合、その属性は真で、文字がない場合の属性は偽です。- は、属性が存在しないことを示します。現在、以下の1つの文字だけが認識されます。
v 可視(省略値)ネットワーク。環境変数NETPATHが設定されていないときに使用します。
protocol family
protocol familyフィールドおよびprotocol nameフィールドは、プロトコル固有のアプリケーションに提供されます。protocol familyフィールドには、プロトコル群を識別する文字列が収められています。protocol family識別子は、network IDと同じ規則に従います。つまりこの識別子はヌルでない字から成り、長さは最小1で、最大値は制限されていませんが、1行の最大文字数に制限があります。protocol familyフィールドの - は、どのプロトコル群識別子も適用されないこと、つまりそのネットワークが試験的に使われていることを示しています。以下に使用例を示します。
dli 直接データリンク・インタフェース
x25 特にCCITT X.25
protocol name
protocol nameフィールドには、プロトコルを識別する文字列が収められています。protocol name識別子は、network IDと同じ規則に従います。つまりヌルでない文字から成り、長さは最小1であり、最大長は制限されていませんが、1行の最大文字数に制限があります。- は、以下に示されるどの名前も使われていないことを示します。以下に使用例を示します。
x25 X.25プロトコル
x25pvc X.25専用・バーチャル・サーキット
hdlcabm ハイレベル・データリンク制御手順非同期バランス・モード
hdlcnrm ハイレベル・データリンク制御手順通常応答モード
network device
network deviceは、トランスポート・プロバイダへの接続に使用されるデバイスの絶対パス名です。通常、このデバイスは/devディレクトリにあります。このnetwork deviceは必ず指定しなければなりません。
directory lookup libraries
directory lookup librariesは、ネットワークに対するディレクトリ・サービス(name-to-address mappingサービス)をサポートします。このサービスは、Name-to-Address Mapping機能によって実行されます。ネットワークがこのようなライブラリを備えていない場合、netdir機能は動作しません。このフィールドの - は、検索ライブラリがないことを意味します。この場合、ネットワークに対するname-to-address mappingは、機能しません。directory lookup librariesフィールドは、動的にリンクされたライブラリへのパス名をコンマで区切ったリストで構成されています。ライブラリへのパス名は、絶対パスでも相対パスでも可能です。(dlopen(3X)を参照)コンマは\,、バックスラッシュは\\と記述されます。
/etc/netconfig内でシャープ記号(#)で始まる行は、注釈行として扱われます。また、1行の長さは1024文字以下です。
netconfig構造体には、netconfigデータベース・エントリのフィールドに対応する以下のメンバが収められています。
char *nc_netid ネットワークID(NULL終了文字を含む) unsigned int nc_semantics セマンティクス unsigned int nc_flag フラグ char *nc_protofmly プロトコル・ファミリー char *nc_proto プロトコル名 char *nc_device ネットワーク・デバイスの絶対パス名 unsigned int nc_nlookups ディレクトリ検索ライブラリ数 char **nc_lookups ディレクトリ検索ライブラリの絶対パス名 unsigned int nc_unused[8] 将来拡張のために予約 (ユーザ・レベルでは使用できません。)
nc_semanticsフィールドは、上記で識別されたセマンティクスに対応して、以下の値をとります。
NC_TPI_CLTS
NC_TPI_COTS
NC_TPI_COTS_ORD
NC_TPI_RAW
nc_flagフィールドは、ビット・フィールドです。上記で識別された属性に対応して、以下のビットが、現在認識されています。NC_NOFLAGは、どの属性も不在であることを示しています。
NC_NOFLAG
NC_VISIBLE
/etc/netconfig
netconfig.h
dlopen(3X),getneconfig(3N),getnetpath(3N),netdir(3N),environ(5)
目次
![]() ![]() |