XTI/TLI とソケットの比較
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/03 21:48 UTC 版)
「Transport Layer Interface」の記事における「XTI/TLI とソケットの比較」の解説
XTI/TLIとBSDソケットは似ているが、完全に同じというわけではなく、同じ役割の関数が異なる振る舞いをすることも多い。UNIX SVR3 とSVR4 ではTLIとソケットがSTREAMSのTransport Service Interfaceの上に実装されている。 下記の表はPOSIXでのXTIとソケットのインタフェースを比較したものである。 XTI/TLIインタフェースソケットインタフェース意味論的に同一かt_open socket イエス。ただしt_openはオープン時にt_getinfoを実行可能 - socketpair - t_getinfo - - t_getprotaddr getsockname, getpeername イエス。しかしt_getprotaddrは対応する2つの機能を1つで実行可能 t_bind bind, listen イエス。ただしt_bindは対応する2つの機能を1回のコールで実施可能 t_optmgmt getsockopt, setsockopt イエス。ただしt_optmgmtはデフォルト値と調停値を取得できるのに対し、getsockoptとsetsockoptは現在値しか取得/更新できない。 t_unbind bind イエス。ソケットの場合AF_UNSPECを指定することでunbind相当になる。 t_close close イエス。ただし、t_closeでは常にアボート的切断になるのに対し、closeは終了を待ち合わせて解放することもある。 t_getstate - - t_sync - - t_alloc - - t_free - - t_look select, getsockopt selectとgetsockopt (SO_ERROR) はt_lockの全機能をカバーしていない。 t_error perror イエス。ただしXTIは通常のerrnoに追加的にt_errnoを使用し、トランスポート層のエラーだけでなくUNIXシステムのエラーも示すことができる。 t_strerror strerror イエス t_connect connect t_connectの前にt_bindが必須である。 t_rcvconnect select t_rcvconnectは、selectでO_NONBLOCKを指定した場合と同等である。 t_listen, t_accept, t_snddis accept acceptは接続を拒否できないが、t_listenで受け付けた接続要求はその後のt_acceptで初めて許可され、t_snddisを使えば拒否できる。 t_snd, t_sndv send, sendto, sendmsg イエス。しかし t_snd と t_sndv はコネクションモードのトランスポートでのみ使用。 t_rcv, t_rcvv recv, recvfrom, recvmsg イエス。ただしt_rcvとt_rcvvはコネクションモードのトランスポートでのみ使用。 t_snddis close, shutdown t_snddisを発行後も接続要求をlistenし続けることができ、t_connectで接続を再確立することもできる。closeはソケットのファイル記述子を解放してしまう。通信を続ける場合、ソケットでは新たに接続を確立する準備をしなければならない。 t_rcvdis ENOTCONN, ECONNRESET, EPIPE, SIGPIPE イエス。ただし、ソケットではエラーまたはシグナルで通知。 t_sndrel, t_sndreldata shutdown イエス。しかしshutdownには通常解放時にデータを送信する機能はなく、t_sndreldataは通常解放時にデータを送信できる。t_sndrelは単にシャットダウンだけを行う。 t_rcvrel, t_rcvreldata - - t_sndudata, t_sndvudata sendmsg イエス。しかしt_sndudataとt_sndvudataはコネクションレス・モードでのみ使用。 t_rcvudata, t_rcvvudata recvmsg イエス。しかしt_rcvudataとt_rcvvudataはコネクションレス・モードでのみ使用。 t_rcvuderr - - read, write read, write XTI/TLIではread/writeを使用する前にtirdwrモジュールをSTREAMSにプッシュする必要がある。 ライブラリ関数には呼び出し順序の規定があるため、XTI/TLIは状態インジケータを使用しており、ソケットAPIにも同様の仕組みがある。ただし、ソケットのAPI関数は複数の状態で呼び出せることがあるのに対し、XTIのAPI関数は特定の状態でないと呼び出せないようになっている。
※この「XTI/TLI とソケットの比較」の解説は、「Transport Layer Interface」の解説の一部です。
「XTI/TLI とソケットの比較」を含む「Transport Layer Interface」の記事については、「Transport Layer Interface」の概要を参照ください。
- XTI/TLI とソケットの比較のページへのリンク