ハンドシェイクとは,システム間で同期を取ってデータを処理するための機能です。同期用の処理をユーザ側で設定する必要がないため,処理を軽減できます。
ハンドシェイク要求は,全二重の場合コンテンションでの優先権に関係なく,どちらのシステムからでも発行できます。半二重の場合制御権のある側だけが発行できます。
相手システムからハンドシェイク要求を受けると,TP1/NET/OSI-TPはメッセージを編集し,UAPに渡します。UAPは同期合わせをしたあと,相手システムにハンドシェイク応答(TP-HANDSHAKE)を送信します。要求を拒否する場合は,ハンドシェイクの拒否応答(TP-U-ERROR)を送信します。このとき制御権は移動します。
TP1/NET/OSI-TPがハンドシェイクの要求を受信した場合の処理を,次の図に示します。
図2-20 ハンドシェイク
なお,半二重の場合ハンドシェイクが完了しても制御権は移動しません。
半二重通信の場合,制御権委譲とハンドシェイクをまとめて一度に処理できます。相手システムから制御権委譲付きハンドシェイク(TP-HANDSHAKE-AND-GRANT-CONTROL)の要求を受けると,TP1/NET/OSI-TPはメッセージを編集し,制御権委譲付きハンドシェイク(TP-HANDSHAKE-AND-GRANT-CONTROL)の指示をUAPに渡します。UAPは受諾する場合,sendsyncで制御権委譲付きハンドシェイクの応答(TP-HANDSHAKE-AND-GRANT-CONTROL)を送信します。また,要求を拒否する場合は,制御権委譲付きハンドシェイクの拒否応答(TP-U-ERROR)を送信します。制御権は応答の内容に関係なく移動します。制御権委譲付きハンドシェイクの処理を次の図に示します。
図2-21 制御権委譲付きハンドシェイク